diff --git a/ci/common.jsonnet b/ci/common.jsonnet index 308e51e13d5a..56723c5129a4 100644 --- a/ci/common.jsonnet +++ b/ci/common.jsonnet @@ -67,8 +67,8 @@ local common_json = import "../common.json"; assert local _labsjdk = common_json.jdks["labsjdk-ee-latest"]; local _oraclejdk = common_json.jdks["oraclejdk-latest"]; - local _ov = "ee-%s+%s" % [_oraclejdk.version, _oraclejdk.build_id]; - local _lv = _labsjdk.version; + local _ov = _oraclejdk.build_id; + local _lv = std.strReplace(_labsjdk.version, "ee-", "jdk-"); # Skip the check if we are not using a labsjdk. This can happen on JDK integration branches. local no_labsjdk = _labsjdk.name != "labsjdk"; assert no_labsjdk || std.startsWith(_lv, _ov) : "update oraclejdk-latest to match labsjdk-ee-latest: %s+%s vs %s" % [_oraclejdk.version, _oraclejdk.build_id, _labsjdk.version]; diff --git a/common.json b/common.json index b14bcd2c0741..3f46910e350c 100644 --- a/common.json +++ b/common.json @@ -44,13 +44,13 @@ "labsjdk-ee-21Debug": {"name": "labsjdk", "version": "ee-21.0.1+11-jvmci-23.1-b26-debug", "platformspecific": true }, "labsjdk-ee-21-llvm": {"name": "labsjdk", "version": "ee-21.0.1+11-jvmci-23.1-b26-sulong", "platformspecific": true }, - "oraclejdk-latest": {"name": "jpg-jdk", "version": "22", "build_id": "36", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]}, - "labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-22+36-jvmci-b02", "platformspecific": true }, - "labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-22+36-jvmci-b02-debug", "platformspecific": true }, - "labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-22+36-jvmci-b02-sulong", "platformspecific": true }, - "labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-22+36-jvmci-b02", "platformspecific": true }, - "labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-22+36-jvmci-b02-debug", "platformspecific": true }, - "labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-22+36-jvmci-b02-sulong", "platformspecific": true } + "oraclejdk-latest": {"name": "jpg-jdk", "version": "22", "build_id": "jdk-22.0.1+8", "platformspecific": true, "extrabundles": ["static-libs"]}, + "labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-22.0.1+8-jvmci-b01", "platformspecific": true }, + "labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-22.0.1+8-jvmci-b01-debug", "platformspecific": true }, + "labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-22.0.1+8-jvmci-b01-sulong", "platformspecific": true }, + "labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-22.0.1+8-jvmci-b01", "platformspecific": true }, + "labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-22.0.1+8-jvmci-b01-debug", "platformspecific": true }, + "labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-22.0.1+8-jvmci-b01-sulong", "platformspecific": true } }, "eclipse": { diff --git a/compiler/mx.compiler/suite.py b/compiler/mx.compiler/suite.py index 996727a56fb4..3760f2aa5333 100644 --- a/compiler/mx.compiler/suite.py +++ b/compiler/mx.compiler/suite.py @@ -4,7 +4,7 @@ "sourceinprojectwhitelist" : [], "groupId" : "org.graalvm.compiler", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "release" : False, "url" : "http://www.graalvm.org/", "developer" : { diff --git a/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/ConditionalEliminationTest17.java b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/ConditionalEliminationTest17.java new file mode 100644 index 000000000000..27bde36a85d4 --- /dev/null +++ b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/ConditionalEliminationTest17.java @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.graal.compiler.core.test; + +import java.util.EnumSet; + +import org.junit.Test; + +import jdk.graal.compiler.api.directives.GraalDirectives; +import jdk.graal.compiler.core.common.GraalOptions; +import jdk.graal.compiler.options.OptionValues; +import jdk.vm.ci.meta.DeoptimizationReason; + +public class ConditionalEliminationTest17 extends ConditionalEliminationTestBase { + + static final class A { + } + + static final class B { + int value = 1337; + + int value() { + return value; + } + } + + private static boolean equals(byte[] a, byte[] b) { + if (a == b) { + return true; + } else if (a.length != b.length) { + return false; + } else { + for (int i = 0; i < a.length; i++) { + if (a[i] != b[i]) { + return false; + } + } + return true; + } + } + + private static final Object X = new Object(); + private static final Object Y = new Object(); + + public static int test1Snippet(byte[][] haystack, byte[] needle, Object[] otherValues) { + Object someValue = otherValues[0]; + Object anotherValue1 = otherValues[1]; + Object anotherValue2 = otherValues[2]; + if (haystack.length != 0) { + for (int i = 0; i < haystack.length; i++) { + byte[] hay = haystack[i]; + if (equals(hay, needle)) { + int result = 42; + if (anotherValue1 == X) { + if (anotherValue2 == Y) { + result++; + GraalDirectives.controlFlowAnchor(); + } + GraalDirectives.controlFlowAnchor(); + } + if (someValue.getClass() != A.class) { + GraalDirectives.deoptimizeAndInvalidate(); + } + GraalDirectives.controlFlowAnchor(); + return result; + } + } + } + return ((B) someValue).value(); + } + + @Test + public void test1() { + Object[] args = {new byte[][]{"foo".getBytes(), "bar".getBytes()}, "neither".getBytes(), new Object[]{new B(), X, Y}}; + test(getInitialOptions(), EnumSet.allOf(DeoptimizationReason.class), "test1Snippet", args); + } + + public static int test2Snippet(byte[][] haystack, byte[] needle, Object[] otherValues) { + Object someValue = otherValues[0]; + Object anotherValue1 = otherValues[1]; + Object anotherValue2 = otherValues[2]; + if (haystack.length != 0) { + for (int i = 0; i < haystack.length; i++) { + byte[] hay = haystack[i]; + if (equals(hay, needle)) { + int result = 42; + if (anotherValue1 == X) { + if (anotherValue2 == Y) { + result++; + GraalDirectives.controlFlowAnchor(); + } + GraalDirectives.controlFlowAnchor(); + } + if (someValue == null || someValue.getClass() != A.class) { + GraalDirectives.deoptimizeAndInvalidate(); + } + GraalDirectives.controlFlowAnchor(); + return result; + } + } + } + return ((B) someValue).value(); + } + + @Test + public void test2() { + Object[] args = {new byte[][]{"foo".getBytes(), "bar".getBytes()}, "bad".getBytes(), new Object[]{new B(), X, Y}}; + test(getInitialOptions(), EnumSet.allOf(DeoptimizationReason.class), "test2Snippet", args); + } + + // simplified and reduced version of equals (semantics of this method is not relevant, only IR + // shape) + private static boolean simpleEquals(byte[][] a) { + for (int i = 0; i < a.length; i++) { + if (GraalDirectives.sideEffect(i) == 123) { + return true; + } + } + return false; + + } + + // simplified and reduced version of test1Snippet (semantics of this method is not relevant, + // only IR shape) + @SuppressWarnings("unused") + public static int test3Snippet(byte[][] haystack, byte[] needle, Object someValue, Object anotherValue1) { + for (int i = 0; i < haystack.length; i++) { + if (simpleEquals(haystack)) { + int result = 42; + if (anotherValue1 == X) { + GraalDirectives.controlFlowAnchor(); + } + if (someValue.getClass() != A.class) { + GraalDirectives.deoptimizeAndInvalidate(); + } + return result; + } + } + return 0; + } + + @Test + public void test3() { + Object[] args = {new byte[][]{"foo".getBytes(), "bar".getBytes()}, "neither".getBytes(), X, Y}; + OptionValues opt = new OptionValues(getInitialOptions(), GraalOptions.OptFloatingReads, false); + test(opt, EnumSet.allOf(DeoptimizationReason.class), "test3Snippet", args); + } + +} diff --git a/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/FixedGuardSimplificationTest.java b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/FixedGuardSimplificationTest.java new file mode 100644 index 000000000000..51c2c2a135c2 --- /dev/null +++ b/compiler/src/jdk.graal.compiler.test/src/jdk/graal/compiler/core/test/FixedGuardSimplificationTest.java @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +package jdk.graal.compiler.core.test; + +import org.junit.Test; + +import jdk.graal.compiler.api.directives.GraalDirectives; +import jdk.graal.compiler.core.common.type.StampFactory; +import jdk.graal.compiler.nodes.FixedGuardNode; +import jdk.graal.compiler.nodes.GraphState; +import jdk.graal.compiler.nodes.PiNode; +import jdk.graal.compiler.nodes.StructuredGraph; +import jdk.graal.compiler.nodes.ValueNode; +import jdk.graal.compiler.nodes.java.LoadFieldNode; +import jdk.graal.compiler.options.OptionValues; +import jdk.graal.compiler.phases.BasePhase; +import jdk.graal.compiler.phases.tiers.HighTierContext; +import jdk.graal.compiler.phases.tiers.Suites; +import jdk.graal.compiler.virtual.phases.ea.FinalPartialEscapePhase; +import jdk.vm.ci.code.InstalledCode; +import jdk.vm.ci.code.InvalidInstalledCodeException; +import jdk.vm.ci.meta.DeoptimizationAction; +import jdk.vm.ci.meta.DeoptimizationReason; + +/** + * Tests that correct removal of always deoptimizing {@link FixedGuardNode}s in the presence of + * floating reads. This test modifies the graph after PEA to introduce a {@link FixedGuardNode} in a + * branch which is dominated by another {@link FixedGuardNode} with the inverted condition. + * Replacing the always-deopt guard must ensure a proper cleanup of all attached floating reads. + * This is tested by a floating read for which the removed guard ensures non-nullness of the read + * object. If this read would survive the removal of the guard, a segfault would be triggered. The + * guard branch is deleted in midtier after conditional elimination. + */ +public class FixedGuardSimplificationTest extends GraalCompilerTest { + + public static class A { + B b; + + public A(B b) { + this.b = b; + } + } + + public static class B { + A a; + } + + public static void snippet(A a, A a2, int x) { + guardingNull(a); + if (x == 0) { + // a2 is replaced by a1 after FinalPEA + guardingNonNull(a2); + B b = a.b; + A ba = b.a; + GraalDirectives.blackhole(ba); + } + } + + @Override + protected Suites createSuites(OptionValues opts) { + Suites s = super.createSuites(opts); + s.getHighTier().findPhase(FinalPartialEscapePhase.class).add(new BasePhase() { + + @Override + protected void run(StructuredGraph graph, HighTierContext context) { + FixedGuardNode guard = graph.getNodes().filter(FixedGuardNode.class).first(); + FixedGuardNode placeholderGuard = graph.getNodes().filter(FixedGuardNode.class).snapshot().get(1); + + /* + * Makes the inner guard use the inverted condition of the dominating, outer guard + * and adds the corresponding Pi. This can happen during PartialEscapeAnalysis. + */ + placeholderGuard.setCondition(guard.getCondition(), true); + ValueNode nullProven = (ValueNode) guard.getCondition().asNode().inputs().first(); + PiNode pi = (PiNode) graph.addWithoutUnique(PiNode.create(nullProven, StampFactory.objectNonNull(), placeholderGuard)); + LoadFieldNode lf = graph.getNodes().filter(LoadFieldNode.class).first(); + lf.setObject(pi); + } + + @Override + public java.util.Optional notApplicableTo(GraphState graphState) { + return ALWAYS_APPLICABLE; + } + }); + return s; + } + + private static T guardingNull(T value) { + if (value != null) { + GraalDirectives.deoptimize(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode, true); + } + return value; + } + + private static T guardingNonNull(T value) { + if (value == null) { + GraalDirectives.deoptimize(DeoptimizationAction.InvalidateRecompile, DeoptimizationReason.UnreachedCode, true); + } + return value; + } + + @Test + public void test() throws InvalidInstalledCodeException { + InstalledCode code = getCode(getResolvedJavaMethod("snippet")); + boolean exceptionSeen = false; + try { + code.executeVarargs(null, new A(new B()), 0); + } catch (NullPointerException npe) { + exceptionSeen = true; + } + assert exceptionSeen : "Test expects a NPE to be thrown!"; + assert !code.isValid() : "Test expects the code to have deopted!"; + } +} diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java index f9c78435d7c8..04e88585e01c 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/GraalHotSpotVMConfig.java @@ -129,9 +129,9 @@ private HotSpotGraalRuntime.HotSpotGC getSelectedGC() throws GraalError { // of the mark word. public final int lockingMode = getFlag("LockingMode", Integer.class); - public final int lockingModeMonitor = getConstant("LockingMode::LM_MONITOR", Integer.class, 0, JDK >= 22 && JDK_BUILD >= 18); - public final int lockingModeStack = getConstant("LockingMode::LM_LEGACY", Integer.class, 1, JDK >= 22 && JDK_BUILD >= 18); - public final int lockingModeLightweight = getConstant("LockingMode::LM_LIGHTWEIGHT", Integer.class, 2, JDK >= 22 && JDK_BUILD >= 18); + public final int lockingModeMonitor = getConstant("LockingMode::LM_MONITOR", Integer.class, 0, JDK >= 22); + public final int lockingModeStack = getConstant("LockingMode::LM_LEGACY", Integer.class, 1, JDK >= 22); + public final int lockingModeLightweight = getConstant("LockingMode::LM_LIGHTWEIGHT", Integer.class, 2, JDK >= 22); public final boolean foldStableValues = getFlag("FoldStableValues", Boolean.class); public final int maxVectorSize = getFlag("MaxVectorSize", Integer.class); @@ -270,7 +270,7 @@ public final int arrayOopDescLengthOffset() { public final int threadIsInVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_VTMS_transition", Integer.class, "bool"); public final int threadIsInTmpVTMSTransitionOffset = getFieldOffset("JavaThread::_is_in_tmp_VTMS_transition", Integer.class, "bool"); - public final int threadIsDisableSuspendOffset = getFieldOffset("JavaThread::_is_disable_suspend", Integer.class, "bool", -1, JDK >= 22 && JDK_BUILD >= 31); + public final int threadIsDisableSuspendOffset = getFieldOffset("JavaThread::_is_disable_suspend", Integer.class, "bool", -1, JDK >= 22); public final int javaLangThreadJFREpochOffset = getFieldValue("java_lang_Thread::_jfr_epoch_offset", Integer.class, "int"); public final int javaLangThreadTIDOffset = getFieldValue("java_lang_Thread::_tid_offset", Integer.class, "int"); @@ -351,7 +351,7 @@ public int threadLastJavaFpOffset() { public final int objectMonitorEntryList = getFieldOffset("ObjectMonitor::_EntryList", Integer.class, "ObjectWaiter*"); public final int objectMonitorSucc = getFieldOffset("ObjectMonitor::_succ", Integer.class, "JavaThread*"); - public final long objectMonitorAnonymousOwner = getConstant("ObjectMonitor::ANONYMOUS_OWNER", Long.class, 1L, JDK >= 22 && JDK_BUILD >= 18); + public final long objectMonitorAnonymousOwner = getConstant("ObjectMonitor::ANONYMOUS_OWNER", Long.class, 1L, JDK >= 22); public final int markWordNoHashInPlace = getConstant("markWord::no_hash_in_place", Integer.class); public final int markWordNoLockInPlace = getConstant("markWord::no_lock_in_place", Integer.class); @@ -599,9 +599,9 @@ private long getZGCAddressField(String name) { // Tracking of the number of monitors held by the current thread. This is used by loom but in // JDK 20 was enabled by default to ensure it was correctly implemented. public final int threadHeldMonitorCountOffset = getFieldOffset("JavaThread::_held_monitor_count", Integer.class, JDK >= 22 ? "intx" : "int64_t"); - public final int threadLockStackOffset = getFieldOffset("JavaThread::_lock_stack", Integer.class, "LockStack", -1, JDK >= 22 && JDK_BUILD >= 18); - public final int lockStackTopOffset = getFieldOffset("LockStack::_top", Integer.class, "uint32_t", -1, JDK >= 22 && JDK_BUILD >= 18); - public final int lockStackEndOffset = getConstant("LockStack::_end_offset", Integer.class, -1, JDK >= 22 && JDK_BUILD >= 18); + public final int threadLockStackOffset = getFieldOffset("JavaThread::_lock_stack", Integer.class, "LockStack", -1, JDK >= 22); + public final int lockStackTopOffset = getFieldOffset("LockStack::_top", Integer.class, "uint32_t", -1, JDK >= 22); + public final int lockStackEndOffset = getConstant("LockStack::_end_offset", Integer.class, -1, JDK >= 22); public final long throwAndPostJvmtiExceptionAddress = getAddress("JVMCIRuntime::throw_and_post_jvmti_exception"); public final long throwKlassExternalNameExceptionAddress = getAddress("JVMCIRuntime::throw_klass_external_name_exception"); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java index 29668cdc19f8..767c699c24ba 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/JVMCIVersionCheck.java @@ -54,8 +54,8 @@ public final class JVMCIVersionCheck { private static final Map> JVMCI_MIN_VERSIONS = Map.of( "21", Map.of(DEFAULT_VENDOR_ENTRY, new Version(23, 1, 26)), "22", Map.of( - "Oracle Corporation", new Version("22+36", 2), - DEFAULT_VENDOR_ENTRY, new Version("22+36", 2))); + "Oracle Corporation", new Version("22.0.1+8", 1), + DEFAULT_VENDOR_ENTRY, new Version("22.0.1+8", 1))); private static final int NA = 0; /** * Minimum Java release supported by Graal. diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/amd64/AMD64HotSpotAddressLowering.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/amd64/AMD64HotSpotAddressLowering.java index e8fe9643dff3..50a4c581f525 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/amd64/AMD64HotSpotAddressLowering.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/hotspot/amd64/AMD64HotSpotAddressLowering.java @@ -187,14 +187,14 @@ private static ValueNode signExtend(ValueNode input, LoopEx loop) { if (init >= 0 && extremum >= 0) { long shortestTrip = (extremum - init) / stride + 1; if (countedLoopInfo.constantMaxTripCount().equals(shortestTrip)) { - return graph.unique(new ZeroExtendNode(input, INT_BITS, ADDRESS_BITS, true)); + return graph.unique(new ZeroExtendNode(input, INT_BITS, ADDRESS_BITS, false)); } } } if (countedLoopInfo.getLimitCheckedIV() == inductionVariable && inductionVariable.direction() == InductionVariable.Direction.Up && (countedLoopInfo.getOverFlowGuard() != null || countedLoopInfo.counterNeverOverflows())) { - return graph.unique(new ZeroExtendNode(input, INT_BITS, ADDRESS_BITS, true)); + return graph.unique(new ZeroExtendNode(input, INT_BITS, ADDRESS_BITS, false)); } } } diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/loop/phases/LoopPredicationPhase.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/loop/phases/LoopPredicationPhase.java index 7c44206b9671..4fbf9d85c95e 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/loop/phases/LoopPredicationPhase.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/loop/phases/LoopPredicationPhase.java @@ -112,9 +112,8 @@ protected void run(StructuredGraph graph, MidTierContext context) { final InductionVariable counter = counted.getLimitCheckedIV(); final Condition condition = ((CompareNode) counted.getLimitTest().condition()).condition().asCondition(); final boolean inverted = loop.counted().isInverted(); - if ((((IntegerStamp) counter.valueNode().stamp(NodeView.DEFAULT)).getBits() == 32) && - !counted.isUnsignedCheck() && - ((condition != NE && condition != EQ) || (counter.isConstantStride() && Math.abs(counter.constantStride()) == 1)) && + if ((((IntegerStamp) counter.valueNode().stamp(NodeView.DEFAULT)).getBits() == 32) && !counted.isUnsignedCheck() && + ((condition != NE && condition != EQ) || (counter.isConstantStride() && LoopEx.absStrideIsOne(counter))) && (loop.loopBegin().isMainLoop() || loop.loopBegin().isSimpleLoop())) { NodeIterable guards = loop.whole().nodes().filter(GuardNode.class); if (LoopPredicationMainPath.getValue(graph.getOptions())) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/FixedGuardNode.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/FixedGuardNode.java index dd7514bc3870..2c5dd1ffdf20 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/FixedGuardNode.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/FixedGuardNode.java @@ -39,6 +39,7 @@ import jdk.graal.compiler.nodes.spi.LoweringTool; import jdk.graal.compiler.nodes.spi.SimplifierTool; import jdk.graal.compiler.nodes.spi.SwitchFoldable; +import jdk.graal.compiler.nodes.util.GraphUtil; import jdk.graal.compiler.nodes.calc.IntegerEqualsNode; import jdk.vm.ci.meta.DeoptimizationAction; @@ -77,14 +78,15 @@ public void simplify(SimplifierTool tool) { if (getCondition() instanceof LogicConstantNode) { LogicConstantNode c = (LogicConstantNode) getCondition(); if (c.getValue() == isNegated()) { - FixedNode currentNext = this.next(); - if (currentNext != null) { - tool.deleteBranch(currentNext); - } - + /* + * The guard will always deoptimize. Replace the guard and the remaining branch with + * the corresponding deopt. + */ DeoptimizeNode deopt = graph().add(new DeoptimizeNode(getAction(), getReason(), getSpeculation())); deopt.setStateBefore(stateBefore()); - setNext(deopt); + predecessor().replaceFirstSuccessor(this, deopt); + GraphUtil.killCFG(this); + return; } if (hasUsages()) { /* diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/PiNode.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/PiNode.java index 767fa85689d8..3e64a566aec3 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/PiNode.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/PiNode.java @@ -27,6 +27,9 @@ import static jdk.graal.compiler.nodeinfo.NodeCycles.CYCLES_0; import static jdk.graal.compiler.nodeinfo.NodeSize.SIZE_0; +import java.util.List; + +import jdk.graal.compiler.core.common.SuppressFBWarnings; import jdk.graal.compiler.core.common.type.AbstractPointerStamp; import jdk.graal.compiler.core.common.type.FloatStamp; import jdk.graal.compiler.core.common.type.ObjectStamp; @@ -240,7 +243,10 @@ public void virtualize(VirtualizerTool tool) { } } + @SuppressFBWarnings(value = {"NP"}, justification = "We null check it before") public static ValueNode canonical(ValueNode object, Stamp piStamp, GuardingNode guard, ValueNode self) { + GraalError.guarantee(piStamp != null && object != null, "Invariant piStamp=%s object=%s guard=%s self=%s", piStamp, object, guard, self); + // Use most up to date stamp. Stamp computedStamp = piStamp.improveWith(object.stamp(NodeView.DEFAULT)); @@ -320,7 +326,9 @@ private static void tryEvacuate(SimplifierTool tool, GuardingNode guard, boolean if (guardNode.hasNoUsages()) { return; } - for (PiNode pi : guardNode.usages().filter(PiNode.class).snapshot()) { + + List pis = guardNode.usages().filter(PiNode.class).snapshot(); + for (PiNode pi : pis) { if (!pi.isAlive()) { continue; } @@ -330,6 +338,8 @@ private static void tryEvacuate(SimplifierTool tool, GuardingNode guard, boolean } /* + * RECURSE CALL + * * If there are PiNodes still anchored at this guard then either they must simplify away * because they are no longer necessary or this node must be replaced with a * ValueAnchorNode because the type injected by the PiNode is only true at this point in @@ -343,6 +353,16 @@ private static void tryEvacuate(SimplifierTool tool, GuardingNode guard, boolean tryEvacuate(tool, otherGuard, false); } } + /* + * A note on the RECURSE CALL above: When we have pis with input pis on the same guard + * (which should actually be combined) it can be that the recurse call (processing the + * same pis again) already deletes this node (very special stamp setups necessary). + * Thus, it can be that pi is dead at this point already, so we have to check for this + * again. + */ + if (!pi.isAlive()) { + continue; + } Node canonical = pi.canonical(tool); if (canonical != pi) { if (!canonical.isAlive()) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/calc/SignExtendNode.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/calc/SignExtendNode.java index 10563f91855c..24cd5019d899 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/calc/SignExtendNode.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/calc/SignExtendNode.java @@ -124,7 +124,7 @@ private static ValueNode canonical(SignExtendNode self, ValueNode forValue, int if ((inputStamp.mayBeSet() & (1L << (inputBits - 1))) == 0L) { // 0xxx -(sign-extend)-> 0000 0xxx // ==> 0xxx -(zero-extend)-> 0000 0xxx - return ZeroExtendNode.create(forValue, inputBits, resultBits, view, true); + return ZeroExtendNode.create(forValue, inputBits, resultBits, view, false); } } if (forValue instanceof NarrowNode) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/calc/ZeroExtendNode.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/calc/ZeroExtendNode.java index ee26d641b7f7..ecf3d8ba81e1 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/calc/ZeroExtendNode.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/calc/ZeroExtendNode.java @@ -35,6 +35,7 @@ import jdk.graal.compiler.core.common.type.PrimitiveStamp; import jdk.graal.compiler.core.common.type.Stamp; import jdk.graal.compiler.debug.Assertions; +import jdk.graal.compiler.debug.GraalError; import jdk.graal.compiler.graph.NodeClass; import jdk.graal.compiler.lir.gen.ArithmeticLIRGeneratorTool; import jdk.graal.compiler.nodeinfo.NodeInfo; @@ -67,14 +68,15 @@ public ZeroExtendNode(ValueNode input, int resultBits) { public ZeroExtendNode(ValueNode input, int inputBits, int resultBits, boolean inputAlwaysPositive) { super(TYPE, BinaryArithmeticNode.getArithmeticOpTable(input).getZeroExtend(), inputBits, resultBits, input); this.inputAlwaysPositive = inputAlwaysPositive; + GraalError.guarantee(!inputAlwaysPositive, "ZeroExtendNode.inputAlwaysPositive is deprecated."); } public static ValueNode create(ValueNode input, int resultBits, NodeView view) { - return create(input, PrimitiveStamp.getBits(input.stamp(view)), resultBits, view, inputAlwaysPositive(input)); + return create(input, PrimitiveStamp.getBits(input.stamp(view)), resultBits, view, false); } public static ValueNode create(ValueNode input, int inputBits, int resultBits, NodeView view) { - return create(input, inputBits, resultBits, view, inputAlwaysPositive(input)); + return create(input, inputBits, resultBits, view, false); } public static ValueNode create(ValueNode input, int inputBits, int resultBits, NodeView view, boolean alwaysPositive) { @@ -86,15 +88,6 @@ public static ValueNode create(ValueNode input, int inputBits, int resultBits, N return canonical(null, input, inputBits, resultBits, view, alwaysPositive); } - private static boolean inputAlwaysPositive(ValueNode v) { - Stamp s = v.stamp(NodeView.DEFAULT); - if (s instanceof IntegerStamp) { - return ((IntegerStamp) s).isPositive(); - } else { - return false; - } - } - @Override protected IntegerConvertOp getOp(ArithmeticOpTable table) { return table.getZeroExtend(); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/cfg/ControlFlowGraph.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/cfg/ControlFlowGraph.java index 501a69a71c19..7838929ff282 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/cfg/ControlFlowGraph.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/cfg/ControlFlowGraph.java @@ -44,6 +44,7 @@ import jdk.graal.compiler.debug.DebugContext; import jdk.graal.compiler.debug.GraalError; import jdk.graal.compiler.debug.MemUseTrackerKey; +import jdk.graal.compiler.debug.TTY; import jdk.graal.compiler.graph.Node; import jdk.graal.compiler.graph.NodeMap; import jdk.graal.compiler.graph.iterators.NodeIterable; @@ -219,6 +220,44 @@ public void updateCachedLocalLoopFrequency(LoopBeginNode lb, Function { + private final ControlFlowGraph.RecursiveVisitor visitor; + private String indent = ""; + + public LoggingCFGDecorator(ControlFlowGraph.RecursiveVisitor visitor, ControlFlowGraph cfg) { + this.visitor = visitor; + TTY.printf("DomTree for %s%n", cfg.graph); + printDomTree(cfg.getStartBlock(), ""); + } + + private static void printDomTree(HIRBlock cur, String indent) { + TTY.printf("%s%s [dom %s, post dom %s]%n", indent, cur, cur.getDominator(), cur.getPostdominator()); + HIRBlock dominated = cur.getFirstDominated(); + while (dominated != null) { + printDomTree(dominated, indent + "\t"); + dominated = dominated.getDominatedSibling(); + } + } + + @Override + public HIRBlock enter(HIRBlock b) { + TTY.printf("%sEnter block %s for %s%n", indent, b, visitor); + indent += "\t"; + return visitor.enter(b); + } + + @Override + public void exit(HIRBlock b, HIRBlock value) { + indent = indent.substring(0, indent.length() - 1); + TTY.printf("%sExit block %s with value %s for %s%n", indent, b, value, visitor); + visitor.exit(b, value); + } + } + @SuppressWarnings("unchecked") public void visitDominatorTreeDefault(RecursiveVisitor visitor) { diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/loop/LoopEx.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/loop/LoopEx.java index 2a5ad5e71fc2..7b349523b243 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/loop/LoopEx.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/loop/LoopEx.java @@ -334,7 +334,7 @@ public boolean detectCounted() { // signed: i < MAX_INT } else if (limitStamp.asConstant() != null && limitStamp.asConstant().asLong() == counterStamp.unsignedUpperBound()) { unsigned = true; - } else if (!iv.isConstantStride() || Math.abs(iv.constantStride()) != 1 || initStamp.upperBound() > limitStamp.lowerBound()) { + } else if (!iv.isConstantStride() || !absStrideIsOne(iv) || initStamp.upperBound() > limitStamp.lowerBound()) { return false; } } else if (iv.direction() == InductionVariable.Direction.Down) { @@ -342,7 +342,7 @@ public boolean detectCounted() { // signed: MIN_INT > i } else if (limitStamp.asConstant() != null && limitStamp.asConstant().asLong() == counterStamp.unsignedLowerBound()) { unsigned = true; - } else if (!iv.isConstantStride() || Math.abs(iv.constantStride()) != 1 || initStamp.lowerBound() < limitStamp.upperBound()) { + } else if (!iv.isConstantStride() || !absStrideIsOne(iv) || initStamp.lowerBound() < limitStamp.upperBound()) { return false; } } else { @@ -389,6 +389,15 @@ public boolean detectCounted() { return false; } + public static boolean absStrideIsOne(InductionVariable limitCheckedIV) { + /* + * While Math.abs can overflow for MIN_VALUE it is fine here. In case of overflow we still + * get a value != 1 (namely MIN_VALUE again). Overflow handling for the limit checked IV is + * done in CountedLoopInfo and is an orthogonal issue. + */ + return Math.abs(limitCheckedIV.constantStride()) == 1; + } + public boolean isCfgLoopExit(AbstractBeginNode begin) { HIRBlock block = data.getCFG().blockFor(begin); return loop.getDepth() > block.getLoopDepth() || loop.isNaturalExit(block); diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/loop/LoopFragmentInside.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/loop/LoopFragmentInside.java index bb9873a838a3..bd4714117fca 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/loop/LoopFragmentInside.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/nodes/loop/LoopFragmentInside.java @@ -291,6 +291,8 @@ protected CompareNode placeNewSegmentAndCleanup(LoopEx loop, EconomicMap trueGuards = EconomicMap.create(Equivalence.IDENTITY); - for (GuardNode guard : trueSuccessor.guards()) { - LogicNode condition = guard.getCondition(); - if (condition.hasMoreThanOneUsage()) { - trueGuards.put(condition, guard); - } + /** + * A note on loop exits and deferred loop exits in dominator tree traversal for + * MoveGuardsUpwards: We must not defer loop exits when we run the move guards upwards + * because a loop exit block is itself part of the dominator tree (normally as a + * dedicated block) and we cannot leave it out. All the logic explained above under + * "REASONING" is only correct if we visit all blocks in dominance order. Thus, when we + * move guards we must ensure we are safe proxy wise. + * + * In order to do so we verify that the location of the anchor block can be used by the + * current block without the need of any proxies. + */ + final boolean canMoveGuardsToAnchorBlock = b.getCfg().graph.isAfterStage(StageFlag.VALUE_PROXY_REMOVAL) || + LoopUtility.canUseWithoutProxy(b.getCfg(), anchorBlock.getBeginNode(), b.getBeginNode()); + + if (canMoveGuardsToAnchorBlock) { + if (anchorBlock != b) { + AbstractBeginNode abstractBegin = beginNode; + abstractBegin.replaceAtUsages(anchorBlock.getBeginNode(), InputType.Anchor, InputType.Guard); + abstractBegin.graph().getDebug().dump(DebugContext.VERY_DETAILED_LEVEL, abstractBegin.graph(), "After moving guard and anchored usages from %s to %s", abstractBegin, + anchorBlock.getBeginNode()); + assert abstractBegin.anchored().isEmpty(); } - if (!trueGuards.isEmpty()) { - /* - * Special case loop exits: We must only ever move guards over loop exits if we - * move them over all loop exits (i.e. if a successor is a loop exit it must be - * the only loop exit or a loop has two exits and both are successors of the - * current if). Else we would risk moving a guard from after a particular exit - * into the loop (might be loop invariant) which can be too early resulting in - * the generated code deopting without the need to. - * - * Note: The code below is written with the possibility in mind that both - * successors are loop exits, even of potentially different loops. Thus, we need - * to ensure we see all possible loop exits involved for all loops. - */ - EconomicSet allLoopsAllExits = null; - if (trueSuccessor instanceof LoopExitNode successor) { - if (allLoopsAllExits == null) { - allLoopsAllExits = EconomicSet.create(); + FixedNode endNode = b.getEndNode(); + if (endNode instanceof IfNode) { + IfNode node = (IfNode) endNode; + + // Check if we can move guards upwards. + AbstractBeginNode trueSuccessor = node.trueSuccessor(); + AbstractBeginNode falseSuccessor = node.falseSuccessor(); + + EconomicMap trueGuards = EconomicMap.create(Equivalence.IDENTITY); + for (GuardNode guard : trueSuccessor.guards()) { + LogicNode condition = guard.getCondition(); + if (condition.hasMoreThanOneUsage()) { + trueGuards.put(condition, guard); } - allLoopsAllExits.addAll(successor.loopBegin().loopExits()); - allLoopsAllExits.remove(successor); } - if (falseSuccessor instanceof LoopExitNode successor) { - if (allLoopsAllExits == null) { - allLoopsAllExits = EconomicSet.create(); + if (!trueGuards.isEmpty()) { + /* + * Special case loop exits: We must only ever move guards over loop exits if + * we move them over all loop exits (i.e. if a successor is a loop exit it + * must be the only loop exit or a loop has two exits and both are + * successors of the current if). Else we would risk moving a guard from + * after a particular exit into the loop (might be loop invariant) which can + * be too early resulting in the generated code deopting without the need + * to. + * + * Note: The code below is written with the possibility in mind that both + * successors are loop exits, even of potentially different loops. Thus, we + * need to ensure we see all possible loop exits involved for all loops. + */ + EconomicSet allLoopsAllExits = null; + if (trueSuccessor instanceof LoopExitNode successor) { + if (allLoopsAllExits == null) { + allLoopsAllExits = EconomicSet.create(); + } + allLoopsAllExits.addAll(successor.loopBegin().loopExits()); + allLoopsAllExits.remove(successor); } - allLoopsAllExits.addAll(successor.loopBegin().loopExits()); - allLoopsAllExits.remove(successor); - } - if (allLoopsAllExits == null || allLoopsAllExits.isEmpty()) { - for (GuardNode falseGuard : falseSuccessor.guards().snapshot()) { - GuardNode trueGuard = trueGuards.get(falseGuard.getCondition()); - if (trueGuard != null && falseGuard.isNegated() == trueGuard.isNegated()) { - Speculation speculation = trueGuard.getSpeculation(); - if (speculation == null) { - speculation = falseGuard.getSpeculation(); - } else if (falseGuard.getSpeculation() != null && falseGuard.getSpeculation() != speculation) { - // Cannot optimize due to different speculations. - continue; - } - try (DebugCloseable closeable = falseGuard.withNodeSourcePosition()) { - StructuredGraph graph = falseGuard.graph(); - GuardNode newlyCreatedGuard = new GuardNode(falseGuard.getCondition(), anchorBlock.getBeginNode(), falseGuard.getReason(), falseGuard.getAction(), - falseGuard.isNegated(), speculation, - falseGuard.getNoDeoptSuccessorPosition()); - GuardNode newGuard = node.graph().unique(newlyCreatedGuard); - if (trueGuard.isAlive()) { - if (trueSuccessor instanceof LoopExitNode && beginNode.graph().isBeforeStage(StageFlag.VALUE_PROXY_REMOVAL)) { - trueGuard.replaceAndDelete(ProxyNode.forGuard(newGuard, (LoopExitNode) trueSuccessor)); + if (falseSuccessor instanceof LoopExitNode successor) { + if (allLoopsAllExits == null) { + allLoopsAllExits = EconomicSet.create(); + } + allLoopsAllExits.addAll(successor.loopBegin().loopExits()); + allLoopsAllExits.remove(successor); + } + if (allLoopsAllExits == null || allLoopsAllExits.isEmpty()) { + for (GuardNode falseGuard : falseSuccessor.guards().snapshot()) { + GuardNode trueGuard = trueGuards.get(falseGuard.getCondition()); + if (trueGuard != null && falseGuard.isNegated() == trueGuard.isNegated()) { + Speculation speculation = trueGuard.getSpeculation(); + if (speculation == null) { + speculation = falseGuard.getSpeculation(); + } else if (falseGuard.getSpeculation() != null && falseGuard.getSpeculation() != speculation) { + // Cannot optimize due to different speculations. + continue; + } + try (DebugCloseable closeable = falseGuard.withNodeSourcePosition()) { + StructuredGraph graph = falseGuard.graph(); + GuardNode newlyCreatedGuard = new GuardNode(falseGuard.getCondition(), anchorBlock.getBeginNode(), falseGuard.getReason(), falseGuard.getAction(), + falseGuard.isNegated(), speculation, + falseGuard.getNoDeoptSuccessorPosition()); + GuardNode newGuard = node.graph().unique(newlyCreatedGuard); + if (trueGuard.isAlive()) { + if (trueSuccessor instanceof LoopExitNode && beginNode.graph().isBeforeStage(StageFlag.VALUE_PROXY_REMOVAL)) { + trueGuard.replaceAndDelete(ProxyNode.forGuard(newGuard, (LoopExitNode) trueSuccessor)); + } else { + trueGuard.replaceAndDelete(newGuard); + } + } + if (falseSuccessor instanceof LoopExitNode && beginNode.graph().isBeforeStage(StageFlag.VALUE_PROXY_REMOVAL)) { + falseGuard.replaceAndDelete(ProxyNode.forGuard(newGuard, (LoopExitNode) falseSuccessor)); } else { - trueGuard.replaceAndDelete(newGuard); + falseGuard.replaceAndDelete(newGuard); } + graph.getOptimizationLog().report(ConditionalEliminationPhase.class, "GuardCombination", falseGuard); } - if (falseSuccessor instanceof LoopExitNode && beginNode.graph().isBeforeStage(StageFlag.VALUE_PROXY_REMOVAL)) { - falseGuard.replaceAndDelete(ProxyNode.forGuard(newGuard, (LoopExitNode) falseSuccessor)); - } else { - falseGuard.replaceAndDelete(newGuard); - } - graph.getOptimizationLog().report(ConditionalEliminationPhase.class, "GuardCombination", falseGuard); } } } diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/InsertGuardFencesPhase.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/InsertGuardFencesPhase.java index 0983eaf4ddd1..01175be01f6a 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/InsertGuardFencesPhase.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/InsertGuardFencesPhase.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Optional; +import jdk.graal.compiler.core.common.SpectrePHTMitigations; import jdk.graal.compiler.core.common.type.IntegerStamp; import jdk.graal.compiler.debug.Assertions; import jdk.graal.compiler.debug.DebugContext; @@ -68,6 +69,10 @@ public Optional notApplicableTo(GraphState graphState) { @Override protected void run(StructuredGraph graph) { + SpectrePHTMitigations mitigations = SpectrePHTBarriers.getValue(graph.getOptions()); + if (mitigations == SpectrePHTMitigations.None || mitigations == SpectrePHTMitigations.AllTargets) { + return; + } ControlFlowGraph cfg = ControlFlowGraph.newBuilder(graph).connectBlocks(true).computeFrequency(true).build(); for (AbstractBeginNode beginNode : graph.getNodes(AbstractBeginNode.TYPE)) { if (hasPotentialUnsafeAccess(cfg, beginNode)) { @@ -76,7 +81,7 @@ protected void run(StructuredGraph graph) { continue; } if (hasGuardUsages(beginNode)) { - if (SpectrePHTBarriers.getValue(graph.getOptions()) == NonDeoptGuardTargets) { + if (mitigations == NonDeoptGuardTargets) { if (isDeoptGuard(beginNode)) { graph.getDebug().log(DebugContext.VERBOSE_LEVEL, "Skipping deoptimizing guard speculation fence at %s", beginNode); continue; diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/util/LoopUtility.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/util/LoopUtility.java index 8fe102300bab..f025087619d8 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/util/LoopUtility.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/phases/common/util/LoopUtility.java @@ -29,6 +29,7 @@ import jdk.graal.compiler.core.common.cfg.Loop; import jdk.graal.compiler.core.common.type.IntegerStamp; import jdk.graal.compiler.core.common.type.Stamp; +import jdk.graal.compiler.debug.GraalError; import jdk.graal.compiler.graph.Graph.NodeEvent; import jdk.graal.compiler.graph.Graph.NodeEventScope; import jdk.graal.compiler.graph.Node; @@ -54,6 +55,38 @@ public class LoopUtility { + public static boolean canTakeAbs(long l, int bits) { + try { + abs(l, bits); + return true; + } catch (ArithmeticException e) { + return false; + } + } + + /** + * Compute {@link Math#abs(long)} for the given arguments and the given bit size. Throw a + * {@link ArithmeticException} if the abs operation would overflow. + */ + public static long abs(long l, int bits) throws ArithmeticException { + if (bits == 32) { + if (l == Integer.MIN_VALUE) { + throw new ArithmeticException("Abs on Integer.MIN_VALUE would cause an overflow because abs(Integer.MIN_VALUE) = Integer.MAX_VALUE + 1 which does not fit in int (32 bits)"); + } else { + final int i = (int) l; + return Math.abs(i); + } + } else if (bits == 64) { + if (l == Long.MIN_VALUE) { + throw new ArithmeticException("Abs on Long.MIN_VALUE would cause an overflow because abs(Long.MIN_VALUE) = Long.MAX_VALUE + 1 which does not fit in long (64 bits)"); + } else { + return Math.abs(l); + } + } else { + throw GraalError.shouldNotReachHere("Must be one of java's core datatypes int/long but is " + bits); + } + } + /** * Determine if the def can use node {@code use} without the need for value proxies. This means * there is no loop exit between the schedule point of def and use that would require a diff --git a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/nodes/BasicArrayCopyNode.java b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/nodes/BasicArrayCopyNode.java index 83c90a192163..217c061346fb 100644 --- a/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/nodes/BasicArrayCopyNode.java +++ b/compiler/src/jdk.graal.compiler/src/jdk/graal/compiler/replacements/nodes/BasicArrayCopyNode.java @@ -255,6 +255,39 @@ public boolean isExact() { return false; } + /** + * When dealing with arrays of primitives it's possible to store a larger value into a smaller + * component type array. For example a long value can be written into a byte array by storing + * the larger value in the first entry and storing {@code Illegal} in the slots whose value + * comes from the long value. So a long in a byte array would be a long value followed by 7 + * {@code Illegal} values. That also means such a write much be treated as a group by arraycopy + * so reads and writes can't be performed in the middle of the illegal values. + *

+ * So to ensure that an arraycopy properly treats these kinds of writes as group, it's + * sufficient to check that the first value is not {@code Illegal} and that the next value after + * the end is not {@code Illegal} since {@code Illegal} values only appear in the tail of these + * groups. + */ + private static boolean ensureIllegalValuesCanBeRepresented(int length, int srcPos, int srcLength, int dstPos, int dstLength, VirtualObjectNode src, VirtualObjectNode dst, VirtualizerTool tool) { + if (length <= 0) { + return true; + } + // check source + ValueNode firstSrcEntry = tool.getEntry(src, srcPos); + ValueNode followingSrcEntry = srcPos + length < srcLength ? tool.getEntry(src, srcPos + length) : null; + if (firstSrcEntry.isIllegalConstant() || followingSrcEntry != null && followingSrcEntry.isIllegalConstant()) { + return false; + } + + // check dst + ValueNode firstDstEntry = tool.getEntry(dst, dstPos); + ValueNode followingDstEntry = dstPos + length < dstLength ? tool.getEntry(dst, dstPos + length) : null; + if (firstDstEntry.isIllegalConstant() || followingDstEntry != null && followingDstEntry.isIllegalConstant()) { + return false; + } + return true; + } + @Override public void virtualize(VirtualizerTool tool) { ValueNode sourcePosition = tool.getAlias(getSourcePosition()); @@ -288,6 +321,9 @@ public void virtualize(VirtualizerTool tool) { if (!checkEntryTypes(srcPosInt, len, srcVirtual, destVirtual.type().getComponentType(), tool)) { return; } + if (!ensureIllegalValuesCanBeRepresented(len, srcPosInt, srcVirtual.entryCount(), destPosInt, destVirtual.entryCount(), srcVirtual, destVirtual, tool)) { + return; + } if (srcVirtual == destVirtual && srcPosInt < destPosInt) { // must copy backwards to avoid losing elements for (int i = len - 1; i >= 0; i--) { diff --git a/docs/reference-manual/native-image/BuildOutput.md b/docs/reference-manual/native-image/BuildOutput.md index c3cdbfadf68a..ac33a412d124 100644 --- a/docs/reference-manual/native-image/BuildOutput.md +++ b/docs/reference-manual/native-image/BuildOutput.md @@ -66,7 +66,7 @@ Recommendations: -------------------------------------------------------------------------------- 0.8s (4.6% of total time) in 35 GCs | Peak RSS: 1.93GB | CPU load: 9.61 -------------------------------------------------------------------------------- -Produced artifacts: +Build artifacts: /home/janedoe/helloworld/helloworld (executable) /home/janedoe/helloworld/helloworld.debug (debug_info) /home/janedoe/helloworld/sources (debug_info) @@ -341,11 +341,22 @@ If there is enough headroom and the [GC statistics](#glossary-garbage-collection The CPU time used by the process divided by the total process time. Increase the number of CPU cores to reduce the time to build the native binary. +## Build Artifacts + +The list of all build artifacts. +This includes the generated native binary, but it can also contain other artifacts such as additional libraries, C header files, or debug info. +Some of these artifacts must remain in the same location with the native binary as they are needed at run time. +For applications using AWT, for example, the build process will also output libraries from the JDK and shims to provide compatible AWT support. +These libraries need to be copied and distributed together with the native binary. +Use the `-H:+GenerateBuildArtifactsFile` option to instruct the builder to produce a machine-readable version of the build artifact list in JSON format. +Such a JSON file validates against the JSON schema defined in [`build-artifacts-schema-v0.9.0.json`](https://github.com/oracle/graal/blob/master/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json). +This schema also contains descriptions for each possible artifact type and explains whether they are needed at run time or not. + ## Machine-Readable Build Output The build output produced by the `native-image` builder is designed for humans, can evolve with new releases, and should thus not be parsed in any way by tools. Instead, use the `-H:BuildOutputJSONFile=` option to instruct the builder to produce machine-readable build output in JSON format that can be used, for example, for building monitoring tools. -The JSON files validate against the JSON schema defined in [`build-output-schema-v0.9.2.json`](https://github.com/oracle/graal/tree/master/docs/reference-manual/native-image/assets/build-output-schema-v0.9.2.json). +Such a JSON file validates against the JSON schema defined in [`build-output-schema-v0.9.2.json`](https://github.com/oracle/graal/tree/master/docs/reference-manual/native-image/assets/build-output-schema-v0.9.2.json). Note that a JSON file is produced if and only if a build succeeds. The following example illustrates how this could be used in a CI/CD build pipeline to check that the number of reachable methods does not exceed a certain threshold: diff --git a/docs/reference-manual/native-image/MemoryManagement.md b/docs/reference-manual/native-image/MemoryManagement.md index 59d3bac9695f..e6a2cd3e0e15 100644 --- a/docs/reference-manual/native-image/MemoryManagement.md +++ b/docs/reference-manual/native-image/MemoryManagement.md @@ -164,7 +164,7 @@ Here is a small subset of the options that can be specified when doing performan ```shell # Build and execute a native image that uses the G1 GC with a region size of 2MB and a maximum pause time goal of 100ms -native-image --gc=G1 -H:G1RegionSize=2m -R:MaxGCPauseMillis=100 HelloWorld +native-image --gc=G1 -H:G1HeapRegionSize=2m -R:MaxGCPauseMillis=100 HelloWorld ./helloworld # Execute the native image from above and override the maximum pause time goal diff --git a/docs/reference-manual/native-image/OptimizationsAndPerformance.md b/docs/reference-manual/native-image/OptimizationsAndPerformance.md index 7f2323e25b75..6e72dd4f14d3 100644 --- a/docs/reference-manual/native-image/OptimizationsAndPerformance.md +++ b/docs/reference-manual/native-image/OptimizationsAndPerformance.md @@ -7,7 +7,35 @@ permalink: /reference-manual/native-image/optimizations-and-performance/ # Optimizations and Performance -Native Image provides advanced mechanisms to further optimize the generated binary: +Native Image provides different mechanisms that enable users to optimize a generated binary in terms of performance, file size, build time, debuggability, and other metrics. + +### Optimization Levels + +Similar to `gcc` and `clang`, users can control the optimization level using the `-O` option. +By default, `-O2` is used which aims for a good tradeoff between performance, file size, and build time. +The following table provides an overview of the different optimization levels and explains when they are useful: + +| Level | Optimizations | Use Cases | +|:---:|:---:|---| +| `-Ob` | Reduced | Quick build mode: Speeds up builds during development by avoiding time-consuming optimizations. This can also reduce file size sometimes. | +| `-O0` | None | Typically used together with `-g` to improve the debugging experience. | +| `-O1` | Basic | Trades performance for reduced file size and build time. Oracle GraalVM's `-O1` is somewhat comparable to `-O2` in GraalVM Community Edition. | +| `-O2` | Advanced | **Default:** Aims for good performance at a reasonable file size. | +| `-O3` | All | Aims for the best performance at the cost of longer build times. Used automatically by Oracle GraalVM for [PGO builds](guides/optimize-native-executable-with-pgo.md) (`--pgo` option). `-O3` and `-O2` are identical in GraalVM Community Edition. | + +### Optimizing for Specific Machines + +Native Image provides a `-march` option that works similarly to the ones in `gcc` and `clang`: it enables users to control the set of instructions that the Graal compiler can use when compiling code to native. +By default, Native Image uses [`x86-64-v3` on x64](https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels){:target="_blank"} and [`armv8-a` on AArch64](https://en.wikipedia.org/wiki/ARM_architecture_family#Cores){:target="_blank"}. +Use `-march=list` to list all available machine types. +If the generated binary is built on the same or similar machine type that it is also deployed on, use `-march=native`. +This option instructs the compiler to use all instructions that it finds available on the machine the binary is generated on. +If the generated binary, on the other hand, is distributed to users with many different, and potentially very old machines, use `-march=compatibility`. +This reduces the set of instructions used by the compiler to a minimum and thus improves the compatibility of the generated binary. + +### Additional Features + +Native Image provides additional features to further optimize a generated binary: - Profile-Guided Optimizations (PGO) can provide additional performance gain and higher throughput for most native images. See [Optimize a Native Executable with PGO](guides/optimize-native-executable-with-pgo.md). - Choosing an appropriate Garbage Collector and tailoring the garbage collection policy can reduce GC times. See [Memory Management](MemoryManagement.md). diff --git a/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json b/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json index bb120d232f1a..0cd2059a233b 100644 --- a/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json +++ b/docs/reference-manual/native-image/assets/build-artifacts-schema-v0.9.0.json @@ -11,7 +11,7 @@ "title": "Relative path to file or directory", "type": "string" }, - "title": "Build information generated by Native Image (not needed at run-time)", + "title": "Build information generated by Native Image (not needed at run time)", "type": "array" }, "c_headers": { @@ -21,7 +21,7 @@ "title": "Relative path to file or directory", "type": "string" }, - "title": "C header files generated by Native Image (not needed at run-time)", + "title": "C header files generated by Native Image (not needed at run time)", "type": "array" }, "debug_info": { @@ -31,7 +31,7 @@ "title": "Relative path to file or directory", "type": "string" }, - "title": "Debug information generated by Native Image (not needed at run-time)", + "title": "Debug information generated by Native Image (not needed at run time)", "type": "array" }, "executables": { @@ -41,7 +41,7 @@ "title": "Relative path to file or directory", "type": "string" }, - "title": "Executables generated by Native Image (needed at run-time)", + "title": "Executables generated by Native Image (needed at run time)", "type": "array" }, "import_libraries": { @@ -51,7 +51,7 @@ "title": "Relative path to file or directory", "type": "string" }, - "title": "Import libraries generated by Native Image (not needed at run-time)", + "title": "Import libraries generated by Native Image (not needed at run time)", "type": "array" }, "jdk_libraries": { @@ -61,7 +61,7 @@ "title": "Relative path to file or directory", "type": "string" }, - "title": "JDK libraries copied by Native Image (needed at run-time)", + "title": "JDK libraries copied by Native Image (needed at run time)", "type": "array" }, "language_home": { @@ -71,7 +71,7 @@ "title": "Relative path to file or directory", "type": "string" }, - "title": "Language home artifacts for Truffle languages (needed at run-time)", + "title": "Language home artifacts for Truffle languages (needed at run time)", "type": "array" }, "shared_libraries": { @@ -81,7 +81,7 @@ "title": "Relative path to file or directory", "type": "string" }, - "title": "Shared libraries generated by Native Image (not needed at run-time)", + "title": "Shared libraries generated by Native Image (needed at run time)", "type": "array" } }, diff --git a/espresso/mx.espresso/suite.py b/espresso/mx.espresso/suite.py index 92b9e4463007..e081fbf8841b 100644 --- a/espresso/mx.espresso/suite.py +++ b/espresso/mx.espresso/suite.py @@ -24,7 +24,7 @@ suite = { "mxversion": "6.44.0", "name": "espresso", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "release" : False, "groupId" : "org.graalvm.espresso", "url" : "https://www.graalvm.org/reference-manual/java-on-truffle/", diff --git a/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/JDWPContext.java b/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/JDWPContext.java index f753e07f8cbc..1788e898dd89 100644 --- a/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/JDWPContext.java +++ b/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/JDWPContext.java @@ -503,4 +503,6 @@ public interface JDWPContext { * Tests if the thread is a virtual thread. */ boolean isVirtualThread(Object thread); + + boolean isSingleSteppingDisabled(); } diff --git a/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/MethodRef.java b/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/MethodRef.java index 59d5df18eb1c..d37b6490d82a 100644 --- a/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/MethodRef.java +++ b/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/api/MethodRef.java @@ -107,13 +107,6 @@ public interface MethodRef { */ byte[] getOriginalCode(); - /** - * Returns all declared parameter types of the method. - * - * @return an array of parameter types - */ - KlassRef[] getParameters(); - /** * @return the local variable table of the method */ @@ -225,11 +218,4 @@ public interface MethodRef { * @return last bci */ long getLastBCI(); - - /** - * Determines if the method was compiled with a variable table. - * - * @return true if the method has a variable table - */ - boolean hasVariableTable(); } diff --git a/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/DebuggerController.java b/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/DebuggerController.java index e0acff47af54..00768b728761 100644 --- a/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/DebuggerController.java +++ b/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/DebuggerController.java @@ -809,7 +809,7 @@ public void onSuspend(SuspendedEvent event) { } CallFrame[] callFrames = createCallFrames(ids.getIdAsLong(currentThread), event.getStackFrames(), 1, steppingInfo); // get the top frame for checking instance filters - if (callFrames.length > 0 && checkExclusionFilters(steppingInfo, event, currentThread, callFrames[0])) { + if (checkExclusionFilters(steppingInfo, event, currentThread, callFrames[0])) { fine(() -> "not suspending here: " + event.getSourceSection()); // continue stepping until completed commandRequestIds.put(currentThread, steppingInfo); @@ -975,6 +975,13 @@ private boolean matchLocation(Pattern[] patterns, CallFrame callFrame) { private boolean checkExclusionFilters(SteppingInfo info, SuspendedEvent event, Object thread, CallFrame frame) { if (info != null) { + if (isSingleSteppingSuspended()) { + continueStepping(event, info, thread); + return true; + } + if (frame == null) { + return false; + } RequestFilter requestFilter = eventFilters.getRequestFilter(info.getRequestId()); if (requestFilter != null && requestFilter.getStepInfo() != null) { @@ -1072,6 +1079,10 @@ private CallFrame[] createCallFrames(long threadId, Iterable st } } + private boolean isSingleSteppingSuspended() { + return context.isSingleSteppingDisabled(); + } + // Truffle logging public void info(Supplier supplier) { jdwpLogger.info(supplier); diff --git a/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/JDWP.java b/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/JDWP.java index fe7480f26e34..01083bd660e6 100644 --- a/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/JDWP.java +++ b/espresso/src/com.oracle.truffle.espresso.jdwp/src/com/oracle/truffle/espresso/jdwp/impl/JDWP.java @@ -1480,23 +1480,7 @@ static CommandResult createReply(Packet packet, JDWPContext context) { return new CommandResult(reply); } - if (!method.hasVariableTable()) { - reply.errorCode(ErrorCodes.ABSENT_INFORMATION); - return new CommandResult(reply); - } - - KlassRef[] params = method.getParameters(); - int argCnt = 0; // the number of words in the frame used by the arguments - for (KlassRef klass : params) { - if (klass.isPrimitive()) { - byte tag = klass.getTagConstant(); - if (tag == TagConstants.DOUBLE || tag == TagConstants.LONG) { - argCnt += 2; - } else { - argCnt++; - } - } - } + int argCnt = getArgCount(method.getSignatureAsString()); LocalRef[] locals = method.getLocalVariableTable().getLocals(); reply.writeInt(argCnt); @@ -1583,24 +1567,8 @@ static CommandResult createReply(Packet packet, JDWPContext context) { if (method == null) { return new CommandResult(reply); } - - if (!method.hasVariableTable()) { - reply.errorCode(ErrorCodes.ABSENT_INFORMATION); - return new CommandResult(reply); - } - - KlassRef[] params = method.getParameters(); - int argCnt = 0; // the number of words in the frame used by the arguments - for (KlassRef klass : params) { - if (klass.isPrimitive()) { - byte tag = klass.getTagConstant(); - if (tag == TagConstants.DOUBLE || tag == TagConstants.LONG) { - argCnt += 2; - } else { - argCnt++; - } - } - } + // the number of words in the frame used by the arguments + int argCnt = getArgCount(method.getSignatureAsString()); LocalRef[] locals = method.getLocalVariableTable().getLocals(); LocalRef[] genericLocals = method.getLocalVariableTypeTable().getLocals(); @@ -3240,6 +3208,70 @@ private static int checkSyntheticFlag(int modBits) { return mod; } + private static int getArgCount(String signature) { + int startIndex = signature.indexOf('(') + 1; + int endIndex = signature.indexOf(')'); + String parameterSig = signature.substring(startIndex, endIndex); + int currentCount = 0; + int currentIndex = 0; + char[] charArray = parameterSig.toCharArray(); + while (currentIndex < charArray.length) { + switch (charArray[currentIndex]) { + case 'D': + case 'J': { + currentCount += 2; + currentIndex++; + break; + } + case 'B': + case 'C': + case 'F': + case 'I': + case 'S': + case 'Z': { + currentCount++; + currentIndex++; + break; + } + case 'L': + currentCount++; + currentIndex = parameterSig.indexOf(';', currentIndex) + 1; + break; + case 'T': + throw new RuntimeException("unexpected type variable"); + case '[': + currentCount++; + currentIndex += parseArrayType(parameterSig, charArray, currentIndex + 1); + break; + default: + throw new RuntimeException("should not reach here"); + } + } + return currentCount; + } + + private static int parseArrayType(String signature, char[] charArray, int currentIndex) { + switch (charArray[currentIndex]) { + case 'D': + case 'J': + case 'B': + case 'C': + case 'F': + case 'I': + case 'S': + case 'Z': + return 2; + case 'L': + return 2 + signature.indexOf(';', currentIndex) - currentIndex; + case 'T': + throw new RuntimeException("unexpected type variable"); + case '[': + return 1 + parseArrayType(signature, charArray, currentIndex + 1); + default: + throw new RuntimeException("should not reach here"); + } + } + private static KlassRef verifyRefType(long refTypeId, PacketStream reply, JDWPContext context) { KlassRef klass; try { diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/EspressoLanguage.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/EspressoLanguage.java index 19c89ad3e627..b8b49d2b7552 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/EspressoLanguage.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/EspressoLanguage.java @@ -597,4 +597,20 @@ public static Path getEspressoRuntime(TruffleLanguage.Env env) { throw EspressoError.shouldNotReachHere(e); } } + + public DisableSingleStepping disableStepping() { + return new DisableSingleStepping(); + } + + public final class DisableSingleStepping implements AutoCloseable { + + private DisableSingleStepping() { + getThreadLocalState().disableSingleStepping(); + } + + @Override + public void close() { + getThreadLocalState().enableSingleStepping(); + } + } } diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/RuntimeConstantPool.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/RuntimeConstantPool.java index d1729cde8840..0e220bf7373b 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/RuntimeConstantPool.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/RuntimeConstantPool.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2020, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/ClassConstant.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/ClassConstant.java index 56df4f7e6dcf..c78672860c38 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/ClassConstant.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/ClassConstant.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -27,6 +27,7 @@ import java.util.logging.Level; import com.oracle.truffle.api.CompilerDirectives; +import com.oracle.truffle.espresso.EspressoLanguage; import com.oracle.truffle.espresso.classfile.ConstantPool; import com.oracle.truffle.espresso.classfile.ConstantPool.Tag; import com.oracle.truffle.espresso.classfile.RuntimeConstantPool; @@ -114,39 +115,42 @@ public Symbol getName(ConstantPool pool) { * If steps 1 and 2 succeed but step 3 fails, C is still valid and usable. Nevertheless, * resolution fails, and D is prohibited from accessing C. */ + @SuppressWarnings("try") @Override public Resolved resolve(RuntimeConstantPool pool, int thisIndex, Klass accessingKlass) { - CLASS_RESOLVE_COUNT.inc(); - assert accessingKlass != null; - CompilerDirectives.transferToInterpreterAndInvalidate(); - Symbol klassName = getName(pool); - try { - EspressoContext context = pool.getContext(); - Symbol type = context.getTypes().fromName(klassName); - Klass klass = context.getMeta().resolveSymbolOrFail(type, accessingKlass.getDefiningClassLoader(), accessingKlass.protectionDomain()); - if (!Klass.checkAccess(klass.getElementalType(), accessingKlass, false)) { - Meta meta = context.getMeta(); - context.getLogger().log(Level.FINE, - "Access check of: " + klass.getType() + " from " + accessingKlass.getType() + " throws IllegalAccessError"); - throw meta.throwExceptionWithMessage(meta.java_lang_IllegalAccessError, meta.toGuestString(klassName)); - } - - return new Resolved(klass); - - } catch (EspressoException e) { - CompilerDirectives.transferToInterpreter(); - Meta meta = pool.getContext().getMeta(); - if (meta.java_lang_ClassNotFoundException.isAssignableFrom(e.getGuestException().getKlass())) { - throw meta.throwExceptionWithMessage(meta.java_lang_NoClassDefFoundError, meta.toGuestString(klassName)); + try (EspressoLanguage.DisableSingleStepping ignored = accessingKlass.getLanguage().disableStepping()) { + CLASS_RESOLVE_COUNT.inc(); + assert accessingKlass != null; + CompilerDirectives.transferToInterpreterAndInvalidate(); + Symbol klassName = getName(pool); + try { + EspressoContext context = pool.getContext(); + Symbol type = context.getTypes().fromName(klassName); + Klass klass = context.getMeta().resolveSymbolOrFail(type, accessingKlass.getDefiningClassLoader(), accessingKlass.protectionDomain()); + if (!Klass.checkAccess(klass.getElementalType(), accessingKlass, false)) { + Meta meta = context.getMeta(); + context.getLogger().log(Level.FINE, + "Access check of: " + klass.getType() + " from " + accessingKlass.getType() + " throws IllegalAccessError"); + throw meta.throwExceptionWithMessage(meta.java_lang_IllegalAccessError, meta.toGuestString(klassName)); + } + + return new Resolved(klass); + + } catch (EspressoException e) { + CompilerDirectives.transferToInterpreter(); + Meta meta = pool.getContext().getMeta(); + if (meta.java_lang_ClassNotFoundException.isAssignableFrom(e.getGuestException().getKlass())) { + throw meta.throwExceptionWithMessage(meta.java_lang_NoClassDefFoundError, meta.toGuestString(klassName)); + } + throw e; + } catch (VirtualMachineError e) { + // Comment from Hotspot: + // Just throw the exception and don't prevent these classes from + // being loaded for virtual machine errors like StackOverflow + // and OutOfMemoryError, etc. + // Needs clarification to section 5.4.3 of the JVM spec (see 6308271) + throw e; } - throw e; - } catch (VirtualMachineError e) { - // Comment from Hotspot: - // Just throw the exception and don't prevent these classes from - // being loaded for virtual machine errors like StackOverflow - // and OutOfMemoryError, etc. - // Needs clarification to section 5.4.3 of the JVM spec (see 6308271) - throw e; } } diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/InvokeDynamicConstant.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/InvokeDynamicConstant.java index 783fae2c7133..93854d0b1810 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/InvokeDynamicConstant.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/classfile/constantpool/InvokeDynamicConstant.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/Method.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/Method.java index ad5c2980fd9b..e047d3213875 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/Method.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/impl/Method.java @@ -1418,11 +1418,6 @@ public byte[] getOriginalCode() { return getCodeAttribute().getOriginalCode(); } - @Override - public KlassRef[] getParameters() { - return getMethod().getParameters(); - } - @Override public LocalVariableTable getLocalVariableTable() { if (codeAttribute != null) { @@ -1439,11 +1434,6 @@ public LocalVariableTable getLocalVariableTypeTable() { return LocalVariableTable.EMPTY_LVTT; } - @Override - public boolean hasVariableTable() { - return getLocalVariableTable() != LocalVariableTable.EMPTY_LVT; - } - @Override public LineNumberTableAttribute getLineNumberTable() { return getLineNumberTableAttribute(); diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BciProvider.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BciProvider.java index 39ecb65eb060..31bd084fe804 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BciProvider.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BciProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BytecodeNode.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BytecodeNode.java index 9a6a275efe7f..b82b6c9f45d9 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BytecodeNode.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/BytecodeNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -2028,6 +2028,7 @@ private int quickenInstanceOf(VirtualFrame frame, int top, int curBCI, int opcod return 0; // Bytecodes.stackEffectOf(opcode); } + @SuppressWarnings("try") private int quickenInvoke(VirtualFrame frame, int top, int curBCI, int opcode, int statementIndex) { QUICKENED_INVOKES.inc(); CompilerDirectives.transferToInterpreterAndInvalidate(); @@ -2039,6 +2040,11 @@ private int quickenInvoke(VirtualFrame frame, int top, int curBCI, int opcode, i Method resolutionSeed = resolveMethod(opcode, cpi); return dispatchQuickened(top, curBCI, cpi, opcode, statementIndex, resolutionSeed, getContext().getEspressoEnv().bytecodeLevelInlining); }); + if (opcode == INVOKESTATIC && quick instanceof InvokeStaticQuickNode invokeStaticQuickNode) { + try (EspressoLanguage.DisableSingleStepping ignored = getLanguage().disableStepping()) { + invokeStaticQuickNode.initializeResolvedKlass(); + } + } // Perform the call outside of the lock. return quick.execute(frame) - Bytecodes.stackEffectOf(opcode); } @@ -2355,7 +2361,6 @@ private int quickenInvokeDynamic(final VirtualFrame frame, int top, int curBCI, // Do invocation outside of the lock. return quick.execute(frame) - Bytecodes.stackEffectOf(opcode); } - // Resolution should happen outside of the bytecode patching lock. InvokeDynamicConstant.CallSiteLink link = pool.linkInvokeDynamic(getMethod().getDeclaringKlass(), indyIndex); @@ -2635,11 +2640,13 @@ private int putField(VirtualFrame frame, int top, Field field, int curBCI, int o int slotCount = (typeHeader == 'J' || typeHeader == 'D') ? 2 : 1; assert slotCount == field.getKind().getSlotCount(); int slot = top - slotCount - 1; // -receiver - StaticObject receiver = (opcode == PUTSTATIC) - ? field.getDeclaringKlass().tryInitializeAndGetStatics() - // Do not release the object, it might be read again in PutFieldNode - : nullCheck(popObject(frame, slot)); - + StaticObject receiver; + if (opcode == PUTSTATIC) { + receiver = initializeAndGetStatics(field); + } else { + // Do not release the object, it might be read again in PutFieldNode + receiver = nullCheck(popObject(frame, slot)); + } if (!noForeignObjects.isValid() && opcode == PUTFIELD) { if (receiver.isForeignObject()) { CompilerDirectives.transferToInterpreterAndInvalidate(); @@ -2755,11 +2762,13 @@ private int getField(VirtualFrame frame, int top, Field field, int curBCI, int o assert field.isStatic() == (opcode == GETSTATIC); int slot = top - 1; - StaticObject receiver = opcode == GETSTATIC - ? field.getDeclaringKlass().tryInitializeAndGetStatics() - // Do not release the object, it might be read again in GetFieldNode - : nullCheck(peekObject(frame, slot)); - + StaticObject receiver; + if (opcode == GETSTATIC) { + receiver = initializeAndGetStatics(field); + } else { + // Do not release the object, it might be read again in GetFieldNode + receiver = nullCheck(peekObject(frame, slot)); + } if (!noForeignObjects.isValid() && opcode == GETFIELD) { if (receiver.isForeignObject()) { CompilerDirectives.transferToInterpreterAndInvalidate(); @@ -2802,6 +2811,18 @@ private int getField(VirtualFrame frame, int top, Field field, int curBCI, int o return slotCount; } + @SuppressWarnings("try") + private StaticObject initializeAndGetStatics(Field field) { + ObjectKlass declaringKlass = field.getDeclaringKlass(); + if (!declaringKlass.isInitialized()) { + CompilerDirectives.transferToInterpreterAndInvalidate(); + try (EspressoLanguage.DisableSingleStepping ignored = getLanguage().disableStepping()) { + declaringKlass.safeInitialize(); + } + } + return declaringKlass.getStatics(); + } + // endregion Field read/write @Override diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoInstrumentableRootNodeImpl.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoInstrumentableRootNodeImpl.java index 42f2c821dbdb..2ee625ba3eff 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoInstrumentableRootNodeImpl.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoInstrumentableRootNodeImpl.java @@ -23,12 +23,14 @@ package com.oracle.truffle.espresso.nodes; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; +import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.instrumentation.StandardTags; import com.oracle.truffle.api.instrumentation.Tag; import com.oracle.truffle.api.source.Source; import com.oracle.truffle.api.source.SourceSection; import com.oracle.truffle.espresso.impl.Method.MethodVersion; import com.oracle.truffle.espresso.meta.EspressoError; +import com.oracle.truffle.espresso.vm.VM; /** * Base node for all implementations of Java methods. @@ -96,4 +98,9 @@ public boolean hasTag(Class tag) { } return false; } + + @Override + public int getBci(Frame frame) { + return VM.EspressoStackElement.NATIVE_BCI; + } } diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoRootNode.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoRootNode.java index 50d319fc7c8f..4eb478b60e36 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoRootNode.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/EspressoRootNode.java @@ -213,7 +213,7 @@ public static EspressoRootNode createSubstitution(Method.MethodVersion methodVer } public final int readBCI(Frame frame) { - return getMethodNode().getBci(frame); + return methodNode.getBci(frame); } public final void setFrameId(Frame frame, long frameId) { diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/IntrinsicSubstitutorNode.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/IntrinsicSubstitutorNode.java index 6c685c71fc89..a5b131e5a338 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/IntrinsicSubstitutorNode.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/IntrinsicSubstitutorNode.java @@ -25,7 +25,6 @@ import java.util.Arrays; -import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.nodes.Node; import com.oracle.truffle.espresso.impl.Method; @@ -86,11 +85,6 @@ public Node copy() { return split(); } - @Override - public int getBci(@SuppressWarnings("unused") Frame frame) { - return -2; - } - @Override boolean isTrivial() { return substitution.isTrivial(); diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/IntrinsifiedNativeMethodNode.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/IntrinsifiedNativeMethodNode.java index fec2ec8a3ae5..7c9d3b0079fb 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/IntrinsifiedNativeMethodNode.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/IntrinsifiedNativeMethodNode.java @@ -23,7 +23,6 @@ package com.oracle.truffle.espresso.nodes; -import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.espresso.impl.Method; import com.oracle.truffle.espresso.substitutions.CallableFromNative; @@ -57,9 +56,4 @@ Object execute(VirtualFrame frame) { } return nativeMethod.invokeDirect(env, args); } - - @Override - public int getBci(Frame frame) { - return -2; - } } diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/NativeMethodNode.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/NativeMethodNode.java index 0c647f1a9900..91f5b27a2a87 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/NativeMethodNode.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/NativeMethodNode.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2018, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,7 +25,6 @@ import com.oracle.truffle.api.CompilerDirectives; import com.oracle.truffle.api.CompilerDirectives.CompilationFinal; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; -import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.interop.ArityException; import com.oracle.truffle.api.interop.InteropLibrary; @@ -150,9 +149,4 @@ private Object processResult(JniEnv env, Object result) { assert !(returnType == Type._void) || result == StaticObject.NULL; return result; } - - @Override - public int getBci(@SuppressWarnings("unused") Frame frame) { - return -2; - } } diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/bytecodes/InitCheck.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/bytecodes/InitCheck.java index 0777c46734bd..7a2274824567 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/bytecodes/InitCheck.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/bytecodes/InitCheck.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/bytecodes/InvokeStatic.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/bytecodes/InvokeStatic.java index a7ddffae1324..bf28015256dd 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/bytecodes/InvokeStatic.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/bytecodes/InvokeStatic.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021, 2021, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2021, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -53,6 +53,10 @@ public abstract class InvokeStatic extends EspressoNode { this.staticMethod = staticMethod; } + public Method getStaticMethod() { + return staticMethod; + } + public abstract Object execute(Object[] args); @Specialization diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/interop/ToReference.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/interop/ToReference.java index c27a27349b6c..02338eb20b80 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/interop/ToReference.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/interop/ToReference.java @@ -52,7 +52,6 @@ import com.oracle.truffle.espresso.meta.EspressoError; import com.oracle.truffle.espresso.meta.Meta; import com.oracle.truffle.espresso.nodes.EspressoNode; -import com.oracle.truffle.espresso.nodes.bytecodes.InitCheck; import com.oracle.truffle.espresso.nodes.bytecodes.InstanceOf; import com.oracle.truffle.espresso.runtime.EspressoContext; import com.oracle.truffle.espresso.runtime.EspressoException; @@ -1392,14 +1391,12 @@ public StaticObject doEspresso(StaticObject value, }) StaticObject doForeignInterface(Object value, @Cached.Shared("value") @CachedLibrary(limit = "LIMIT") InteropLibrary interop, - @Cached InitCheck initCheck, @Cached LookupProxyKlassNode lookupProxyKlassNode, @Cached BranchProfile errorProfile) throws UnsupportedTypeException { try { Object metaObject = getMetaObjectOrThrow(value, interop); WrappedProxyKlass proxyKlass = lookupProxyKlassNode.execute(metaObject, getMetaName(metaObject, interop), targetType); if (proxyKlass != null) { - initCheck.execute(targetType); return proxyKlass.createProxyInstance(value, getLanguage(), interop); } throw new ClassCastException(); diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/quick/invoke/InvokeStaticQuickNode.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/quick/invoke/InvokeStaticQuickNode.java index 9861fc2e81a2..ea576da6c4d3 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/quick/invoke/InvokeStaticQuickNode.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/nodes/quick/invoke/InvokeStaticQuickNode.java @@ -56,4 +56,8 @@ public int execute(VirtualFrame frame) { Object[] args = getArguments(frame); return pushResult(frame, invokeStatic.execute(args)); } + + public void initializeResolvedKlass() { + invokeStatic.getStaticMethod().getDeclaringKlass().safeInitialize(); + } } diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/EspressoThreadLocalState.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/EspressoThreadLocalState.java index 0139ea6f1b78..5507216be427 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/EspressoThreadLocalState.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/EspressoThreadLocalState.java @@ -37,6 +37,8 @@ public class EspressoThreadLocalState { private StaticObject currentPlatformThread; private StaticObject currentVirtualThread; + private int singleSteppingDisabledCounter; + @SuppressWarnings("unused") public EspressoThreadLocalState(EspressoContext context) { typeStack = new ClassRegistry.TypeStack(); @@ -117,4 +119,17 @@ public ClassRegistry.TypeStack getTypeStack() { public VM.PrivilegedStack getPrivilegedStack() { return privilegedStack; } + + public void disableSingleStepping() { + singleSteppingDisabledCounter++; + } + + public void enableSingleStepping() { + assert singleSteppingDisabledCounter > 0; + singleSteppingDisabledCounter--; + } + + public boolean isSteppingDisabled() { + return singleSteppingDisabledCounter > 0; + } } diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/JDWPContextImpl.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/JDWPContextImpl.java index ae4061adf7c8..8ce25fa7dffc 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/JDWPContextImpl.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/runtime/JDWPContextImpl.java @@ -262,6 +262,11 @@ public boolean isVirtualThread(Object thread) { return context.getThreadAccess().isVirtualThread((StaticObject) thread); } + @Override + public boolean isSingleSteppingDisabled() { + return context.getLanguage().getThreadLocalState().isSteppingDisabled(); + } + @Override public Object[] getAllGuestThreads() { StaticObject[] activeThreads = context.getActiveThreads(); @@ -602,7 +607,7 @@ public int getNextBCI(RootNode callerRoot, Frame frame) { if (callerRoot instanceof EspressoRootNode) { EspressoRootNode espressoRootNode = (EspressoRootNode) callerRoot; int bci = (int) readBCIFromFrame(callerRoot, frame); - if (bci != -1) { + if (bci >= 0) { BytecodeStream bs = new BytecodeStream(espressoRootNode.getMethodVersion().getOriginalCode()); return bs.nextBCI(bci); } @@ -686,9 +691,9 @@ public Class> getLanguageClass() { return EspressoLanguage.class; } - private static BciProvider getBciProviderNode(Node node) { - if (node instanceof BciProvider) { - return (BciProvider) node; + private BciProvider getBciProviderNode(Node node) { + if (node instanceof BciProvider bciProvider) { + return bciProvider; } Node currentNode = node.getParent(); while (currentNode != null) { @@ -697,6 +702,10 @@ private static BciProvider getBciProviderNode(Node node) { } currentNode = currentNode.getParent(); } + Node instrumentableNode = getInstrumentableNode(node.getRootNode()); + if (instrumentableNode instanceof BciProvider bciProvider) { + return bciProvider; + } return null; } diff --git a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/Target_com_oracle_truffle_espresso_polyglot_Polyglot.java b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/Target_com_oracle_truffle_espresso_polyglot_Polyglot.java index 10ee517b02f4..29896f43ed1e 100644 --- a/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/Target_com_oracle_truffle_espresso_polyglot_Polyglot.java +++ b/espresso/src/com.oracle.truffle.espresso/src/com/oracle/truffle/espresso/substitutions/Target_com_oracle_truffle_espresso_polyglot_Polyglot.java @@ -45,7 +45,6 @@ import com.oracle.truffle.espresso.impl.ObjectKlass; import com.oracle.truffle.espresso.impl.PrimitiveKlass; import com.oracle.truffle.espresso.meta.Meta; -import com.oracle.truffle.espresso.nodes.bytecodes.InitCheck; import com.oracle.truffle.espresso.nodes.bytecodes.InstanceOf; import com.oracle.truffle.espresso.nodes.interop.MethodArgsUtils; import com.oracle.truffle.espresso.nodes.interop.ToReference; @@ -220,13 +219,11 @@ StaticObject doForeignException( @SuppressWarnings("unused") ObjectKlass targetKlass, @JavaType(Object.class) StaticObject value, @Shared("value") @CachedLibrary(limit = "LIMIT") InteropLibrary interop, - @Cached BranchProfile exceptionProfile, - @Cached InitCheck initCheck) { + @Cached BranchProfile exceptionProfile) { Meta meta = context.getMeta(); // Casting to ForeignException skip the field checks. Object foreignObject = value.rawForeignObject(getLanguage()); if (interop.isException(foreignObject)) { - initCheck.execute(targetKlass); return StaticObject.createForeignException(context, foreignObject, interop); } exceptionProfile.enter(); diff --git a/regex/mx.regex/suite.py b/regex/mx.regex/suite.py index a5d73015e28d..5a641a381a5f 100644 --- a/regex/mx.regex/suite.py +++ b/regex/mx.regex/suite.py @@ -43,7 +43,7 @@ "name" : "regex", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "release" : False, "groupId" : "org.graalvm.regex", "url" : "http://www.graalvm.org/", diff --git a/sdk/mx.sdk/mx_sdk_vm_impl.py b/sdk/mx.sdk/mx_sdk_vm_impl.py index 4df39802976e..54047c179792 100644 --- a/sdk/mx.sdk/mx_sdk_vm_impl.py +++ b/sdk/mx.sdk/mx_sdk_vm_impl.py @@ -765,28 +765,6 @@ def _add_link(_dest, _target, _component=None, _dest_base_name=None): graalvm_dists.difference_update(component_dists) _add(layout, '/lib/graalvm/', ['dependency:' + d for d in sorted(graalvm_dists)], with_sources=True) - if mx.suite('vm', fatalIfMissing=False): - import mx_vm - installer_components_dir = _get_component_type_base(mx_vm.gu_component) + mx_vm.gu_component.dir_name + '/components/' - if not is_graalvm or get_component(mx_vm.gu_component.short_name, stage1=stage1): - # Execute the following code if this is not a GraalVM distribution (e.g., is an installable) or if the - # GraalVM distribution includes `gu`. - # - # Register pre-installed components - for installable_components in installable_component_lists.values(): - manifest_str = _gen_gu_manifest(installable_components, _format_properties, bundled=True) - main_component = _get_main_component(installable_components) - mx.logv("Adding gu metadata for{}installable '{}'".format(' disabled ' if _disable_installable(main_component) else ' ', main_component.installable_id)) - _add(layout, installer_components_dir + 'org.graalvm.' + main_component.installable_id + '.component', "string:" + manifest_str) - # Register Core - manifest_str = _format_properties({ - "Bundle-Name": "GraalVM Core", - "Bundle-Symbolic-Name": "org.graalvm", - "Bundle-Version": _suite.release_version(), - "x-GraalVM-Stability-Level": _get_core_stability(), - }) - _add(layout, installer_components_dir + 'org.graalvm.component', "string:" + manifest_str) - for _base, _suites in component_suites.items(): _metadata = self._get_metadata(_suites) _add(layout, _base + 'release', "string:{}".format(_metadata)) @@ -857,26 +835,6 @@ def _get_metadata(suites, parent_release_file=None): _source += ' '.join(['{}:{}'.format(_s.name, _s.version()) for _s in suites]) _metadata_dict['SOURCE'] = _source _metadata_dict['COMMIT_INFO'] = json.dumps(_commit_info, sort_keys=True) - if _suite.is_release(): - catalog = _release_catalog() - gds_product_id = _release_product_id() - else: - snapshot_catalog = _snapshot_catalog() - gds_product_id = _snapshot_product_id() - gds_snapshot_catalog = _gds_snapshot_catalog() - if snapshot_catalog and _suite.vc: - catalog = "{}/{}".format(snapshot_catalog, _suite.vc.parent(_suite.vc_dir)) - if gds_snapshot_catalog: - catalog += "|" + gds_snapshot_catalog - elif gds_snapshot_catalog: - catalog = gds_snapshot_catalog - else: - catalog = None - if USE_LEGACY_GU: - if catalog: - _metadata_dict['component_catalog'] = catalog - if gds_product_id: - _metadata_dict['GDS_PRODUCT_ID'] = gds_product_id # COMMIT_INFO is unquoted to simplify JSON parsing return mx_sdk_vm.format_release_file(_metadata_dict, {'COMMIT_INFO'}) @@ -2624,148 +2582,6 @@ def _gen_gu_manifest(components, formatter, bundled=False): return formatter(manifest) -class InstallableComponentArchiver(mx.Archiver): - def __init__(self, path, components, **kw_args): - """ - :type path: str - :type components: list[mx_sdk.GraalVmLanguage] - :type kind: str - :type reset_user_group: bool - :type duplicates_action: str - :type context: object - """ - super(InstallableComponentArchiver, self).__init__(path, **kw_args) - self.components = components - self.permissions = [] - self.symlinks = [] - - @staticmethod - def _perm_str(filename): - _perm = str(oct(os.lstat(filename).st_mode)[-3:]) - _str = '' - for _p in _perm: - if _p == '7': - _str += 'rwx' - elif _p == '6': - _str += 'rw-' - elif _p == '5': - _str += 'r-x' - elif _p == '4': - _str += 'r--' - elif _p == '0': - _str += '---' - else: - mx.abort('File {} has unsupported permission {}'.format(filename, _perm)) - return _str - - def add(self, filename, archive_name, provenance): - self.permissions.append('{} = {}'.format(archive_name, self._perm_str(filename))) - super(InstallableComponentArchiver, self).add(filename, archive_name, provenance) - - def add_str(self, data, archive_name, provenance): - self.permissions.append('{} = {}'.format(archive_name, 'rw-rw-r--')) - super(InstallableComponentArchiver, self).add_str(data, archive_name, provenance) - - def add_link(self, target, archive_name, provenance): - self.permissions.append('{} = {}'.format(archive_name, 'rwxrwxrwx')) - self.symlinks.append('{} = {}'.format(archive_name, target)) - # do not add symlinks, use the metadata to create them - - def __exit__(self, exc_type, exc_value, traceback): - assert self.components[0] == _get_main_component(self.components) - _manifest_str_wrapped = _gen_gu_manifest(self.components, _format_manifest) - _manifest_arc_name = 'META-INF/MANIFEST.MF' - - _permissions_str = '\n'.join(self.permissions) - _permissions_arc_name = 'META-INF/permissions' - - _symlinks_str = '\n'.join(self.symlinks) - _symlinks_arc_name = 'META-INF/symlinks' - - for _str, _arc_name in [(_manifest_str_wrapped, _manifest_arc_name), (_permissions_str, _permissions_arc_name), - (_symlinks_str, _symlinks_arc_name)]: - self.add_str(_str, _arc_name, '{}<-string:{}'.format(_arc_name, _str)) - - super(InstallableComponentArchiver, self).__exit__(exc_type, exc_value, traceback) - - -class GraalVmInstallableComponent(BaseGraalVmLayoutDistribution, mx.LayoutJARDistribution): # pylint: disable=R0901 - def __init__(self, component, extra_components=None, **kw_args): - """ - :type component: mx_sdk.GraalVmComponent - """ - self.main_component = component - - def create_archive(path, **_kw_args): - return InstallableComponentArchiver(path, self.components, **_kw_args) - - launcher_configs = list(_get_launcher_configs(component)) - for component_ in extra_components: - launcher_configs += _get_launcher_configs(component_) - - library_configs = list(_get_library_configs(component)) - for component_ in extra_components: - library_configs += _get_library_configs(component_) - - extra_installable_qualifiers = list(component.extra_installable_qualifiers) - for component_ in extra_components: - extra_installable_qualifiers += component_.extra_installable_qualifiers - - other_involved_components = [] - if self.main_component.short_name not in ('svm', 'svmee') \ - and _get_svm_support().is_supported() \ - and ( - any(not _force_bash_launchers(lc) for lc in launcher_configs) or - any(not _skip_libraries(lc) for lc in library_configs)): - other_involved_components += [c for c in registered_graalvm_components(stage1=True) if c.short_name in ('svm', 'svmee')] - - name = '{}_INSTALLABLE'.format(component.installable_id.replace('-', '_').upper()) - for library_config in library_configs: - if _skip_libraries(library_config): - name += '_S' + basename(library_config.destination).upper() - if other_involved_components: - extra_installable_qualifiers += [c.short_name for c in other_involved_components] - if not extra_installable_qualifiers: - extra_installable_qualifiers = mx_sdk_vm.extra_installable_qualifiers(mx_sdk_vm.base_jdk().home, ['ce'], None) - if extra_installable_qualifiers: - name += '_' + '_'.join(sorted(q.upper() for q in extra_installable_qualifiers)) - name += '_JAVA{}'.format(_src_jdk_version) - - for component_ in [component] + extra_components: - for boot_jar in component_.boot_jars: - mx.warn("Component '{}' declares '{}' as 'boot_jar', which is ignored by the build process of the '{}' installable".format(component_.name, boot_jar, name)) - - self.maven = _graalvm_maven_attributes(tag='installable') - components = [component] - if extra_components: - components += extra_components - super(GraalVmInstallableComponent, self).__init__( - suite=_suite, - name=name, - deps=[], - components=components, - is_graalvm=False, - exclLibs=[], - platformDependent=True, - theLicense=None, - testDistribution=False, - archive_factory=create_archive, - path=None, - include_native_image_resources_filelists=True, - **kw_args) - - def get_artifact_metadata(self): - meta = super(GraalVmInstallableComponent, self).get_artifact_metadata() - meta.update({ - 'type': 'installable', - 'installableName': self.main_component.installable_id.lower().replace('-', '_'), - 'longName': self.main_component.name, - 'stability': self.main_component.stability, - 'symbolicName': 'org.graalvm.{}'.format(self.main_component.installable_id), - }) - return meta - - class GraalVmStandaloneComponent(LayoutSuper): # pylint: disable=R0901 def __init__(self, main_component, graalvm, is_jvm, **kw_args): """ @@ -3582,7 +3398,6 @@ def _release_version(): )) main_dists = { 'graalvm': [], - 'graalvm_installables': [], 'graalvm_standalones': [], } with_non_rebuildable_configs = False @@ -3699,12 +3514,6 @@ def register_main_dist(dist, label): # Register main distribution register_main_dist(_final_graalvm_distribution, 'graalvm') - # Register installables - for components in installables.values(): - main_component = _get_main_component(components) - installable_component = GraalVmInstallableComponent(main_component, extra_components=[c for c in components if c != main_component]) - register_main_dist(installable_component, 'graalvm_installables') - # Register standalones needs_java_standalone_jimage = False for components in installables.values(): @@ -3808,7 +3617,7 @@ def register_main_dist(dist, label): jimage_project=final_jimage_project, )) - # Trivial distributions to trigger the build of the final GraalVM distribution, installables, and standalones + # Trivial distributions to trigger the build of the final GraalVM distribution and standalones all_main_dists = [] for label, dists in main_dists.items(): if dists: @@ -4287,7 +4096,7 @@ def graalvm_show(args, forced_graalvm_dist=None): if forced_graalvm_dist is None: # Custom GraalVM distributions with a forced component list do not yet support launchers and libraries. - # No installable or standalone is derived from them. + # No standalone is derived from them. launchers = [p for p in _suite.projects if isinstance(p, GraalVmLauncher) and p.get_containing_graalvm() == graalvm_dist] if launchers: print("Launchers:") @@ -4327,17 +4136,6 @@ def graalvm_show(args, forced_graalvm_dist=None): else: print("No library") - installables = _get_dists(GraalVmInstallableComponent) - if installables and not args.stage1: - print("Installables:") - for i in sorted(installables): - print(" - {}".format(i)) - if args.verbose: - for c in i.components: - print(" - {}".format(c.name)) - else: - print("No installable") - if not args.stage1: jvm_standalones = [] native_standalones = [] @@ -4383,7 +4181,7 @@ def graalvm_show(args, forced_graalvm_dist=None): for config in cfg['configs']: print(f" {config} (from {cfg['source']})") if args.verbose: - for dist_name in 'GRAALVM', 'GRAALVM_INSTALLABLES', 'GRAALVM_STANDALONES', 'ALL_GRAALVM_ARTIFACTS': + for dist_name in 'GRAALVM', 'GRAALVM_STANDALONES', 'ALL_GRAALVM_ARTIFACTS': dist = mx.distribution(dist_name, fatalIfMissing=False) if dist is not None: print(f"Dependencies of the '{dist_name}' distribution:\n -", '\n - '.join(sorted(dep.name for dep in dist.deps))) @@ -4517,11 +4315,6 @@ def graalvm_vendor_version(): mx.add_argument('--debuginfo-dists', action='store_true', help='Generate debuginfo distributions.') mx.add_argument('--generate-debuginfo', action='store', help='Comma-separated list of launchers and libraries (syntax: lib:polyglot) for which to generate debug information (`native-image -g`) (all by default)', default=None) mx.add_argument('--disable-debuginfo-stripping', action='store_true', help='Disable the stripping of debug symbols from the native image.') -mx.add_argument('--snapshot-catalog', action='store', help='Change the default URL of the component catalog for snapshots.', default=None) -mx.add_argument('--gds-snapshot-catalog', action='store', help='Change the default appended URL of the component catalog for snapshots.', default=None) -mx.add_argument('--release-catalog', action='store', help='Change the default URL of the component catalog for releases.', default=None) -mx.add_argument('--snapshot-product-id', action='store', help='Change the default ID of the GDS product ID for snapshots.', default=None) -mx.add_argument('--release-product-id', action='store', help='Change the default ID of the GDS product ID for releases.', default=None) mx.add_argument('--extra-image-builder-argument', action='append', help='Add extra arguments to the image builder.', default=[]) mx.add_argument('--image-profile', action='append', help='Add a profile to be used while building a native image.', default=[]) mx.add_argument('--no-licenses', action='store_true', help='Do not add license files in the archives.') @@ -4877,26 +4670,6 @@ def _rebuildable_image(image_config): return name not in non_rebuildable -def _snapshot_catalog(): - return mx.get_opts().snapshot_catalog or mx.get_env('SNAPSHOT_CATALOG') - - -def _gds_snapshot_catalog(): - return mx.get_opts().gds_snapshot_catalog or mx.get_env('GDS_SNAPSHOT_CATALOG') - - -def _snapshot_product_id(): - return mx.get_opts().snapshot_product_id or mx.get_env('SNAPSHOT_PRODUCT_ID') - - -def _release_catalog(): - return mx.get_opts().release_catalog or mx.get_env('RELEASE_CATALOG') - - -def _release_product_id(): - return mx.get_opts().release_product_id or mx.get_env('RELEASE_PRODUCT_ID') - - def _base_jdk_info(): base_jdk_info = mx.get_opts().base_jdk_info or mx.get_env('BASE_JDK_INFO') if base_jdk_info is None: diff --git a/sdk/mx.sdk/suite.py b/sdk/mx.sdk/suite.py index 3c67b2de966e..5823a8e912ce 100644 --- a/sdk/mx.sdk/suite.py +++ b/sdk/mx.sdk/suite.py @@ -41,7 +41,7 @@ suite = { "mxversion": "6.53.2", "name" : "sdk", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "release" : False, "sourceinprojectwhitelist" : [], "url" : "https://github.com/oracle/graal", diff --git a/substratevm/mx.substratevm/suite.py b/substratevm/mx.substratevm/suite.py index e196b22aa1d8..517a4a1bd7e8 100644 --- a/substratevm/mx.substratevm/suite.py +++ b/substratevm/mx.substratevm/suite.py @@ -2,7 +2,7 @@ suite = { "mxversion": "6.27.1", "name": "substratevm", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "release" : False, "url" : "https://github.com/oracle/graal/tree/master/substratevm", diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateDiagnostics.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateDiagnostics.java index 6f23b899a910..6d5cc22ce0d8 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateDiagnostics.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateDiagnostics.java @@ -718,32 +718,6 @@ public void printDiagnostics(Log log, ErrorContext context, int maxDiagnosticLev } } - private static class DumpTopDeoptimizedFrame extends DiagnosticThunk { - @Override - public int maxInvocationCount() { - return 1; - } - - @Override - @RestrictHeapAccess(access = RestrictHeapAccess.Access.NO_ALLOCATION, reason = "Must not allocate while printing diagnostics.") - public void printDiagnostics(Log log, ErrorContext context, int maxDiagnosticLevel, int invocationCount) { - Pointer sp = context.getStackPointer(); - CodePointer ip = context.getInstructionPointer(); - - if (sp.isNonNull() && ip.isNonNull()) { - long totalFrameSize = getTotalFrameSize(sp, ip); - DeoptimizedFrame deoptFrame = Deoptimizer.checkDeoptimized(sp); - if (deoptFrame != null) { - log.string("Top frame info:").indent(true); - log.string("RSP ").zhex(sp).string(" frame was deoptimized:").newline(); - log.string("SourcePC ").zhex(deoptFrame.getSourcePC()).newline(); - log.string("SourceTotalFrameSize ").signed(totalFrameSize).newline(); - log.indent(false); - } - } - } - } - private static class DumpThreads extends DiagnosticThunk { @Override public int maxInvocationCount() { @@ -1254,9 +1228,6 @@ public static synchronized DiagnosticThunkRegistry singleton() { thunks.add(new DumpRegisters()); thunks.add(new DumpInstructions()); thunks.add(new DumpTopOfCurrentThreadStack()); - if (RuntimeCompilation.isEnabled()) { - thunks.add(new DumpTopDeoptimizedFrame()); - } thunks.add(new DumpCurrentThreadLocals()); thunks.add(new DumpCurrentThreadFrameAnchors()); thunks.add(new DumpCurrentThreadDecodedStackTrace()); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java index 4cb22f602036..6e3274147ccb 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateOptions.java @@ -108,6 +108,10 @@ public class SubstrateOptions { if (!Platform.includedIn(Platform.LINUX.class)) { throw UserError.invalidOptionValue(key, key.getValue(), "Building static executable images is currently only supported on Linux. Remove the '--static' option or build on a Linux machine"); } + if (!LibCBase.targetLibCIs(MuslLibC.class)) { + throw UserError.invalidOptionValue(key, key.getValue(), + "Building static executable images is only supported with musl libc. Remove the '--static' option or add the '--libc=musl' option."); + } }); @APIOption(name = "libc")// @@ -744,8 +748,12 @@ public static int codeAlignment() { public static final HostedOptionKey GenerateDebugInfo = new HostedOptionKey<>(0, SubstrateOptions::validateGenerateDebugInfo) { @Override protected void onValueUpdate(EconomicMap, Object> values, Integer oldValue, Integer newValue) { - if (OS.WINDOWS.isCurrent()) { - /* Keep symbols on Windows. The symbol table is part of the pdb-file. */ + if (!OS.DARWIN.isCurrent()) { + /* + * Keep the symbol table, as it may be used by debugging or profiling tools (e.g., + * perf). On Windows, the symbol table is included in the pdb-file, while on Linux, + * it is part of the .debug file. + */ DeleteLocalSymbols.update(values, newValue == 0); } } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateSegfaultHandler.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateSegfaultHandler.java index e84606ddf7ae..65e2f398b116 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateSegfaultHandler.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/SubstrateSegfaultHandler.java @@ -170,42 +170,52 @@ protected static boolean tryEnterIsolate(RegisterDumper.Context context) { } /* Try to determine the isolate via the thread register. */ - if (SubstrateOptions.MultiThreaded.getValue()) { - /* - * Set the thread register to null so that we don't execute this code more than once if - * we trigger a recursive segfault. - */ - WriteCurrentVMThreadNode.writeCurrentVMThread(WordFactory.nullPointer()); - - IsolateThread isolateThread = (IsolateThread) RegisterDumper.singleton().getThreadPointer(context); - if (isolateThread.isNonNull()) { - isolate = VMThreads.IsolateTL.get(isolateThread); - if (isValid(isolate)) { - if (SubstrateOptions.SpawnIsolates.getValue()) { - CEntryPointSnippets.setHeapBase(isolate); - } - - WriteCurrentVMThreadNode.writeCurrentVMThread(isolateThread); - return true; - } - } + if (SubstrateOptions.MultiThreaded.getValue() && tryEnterIsolateViaThreadRegister(context)) { + return true; } /* Try to determine the isolate via the heap base register. */ - if (SubstrateOptions.SpawnIsolates.getValue()) { - /* - * Set the heap base register to null so that we don't execute this code more than once - * if we trigger a recursive segfault. - */ - CEntryPointSnippets.setHeapBase(WordFactory.nullPointer()); + return SubstrateOptions.SpawnIsolates.getValue() && tryEnterIsolateViaHeapBaseRegister(context); + } + + @Uninterruptible(reason = "Thread state not set up yet.") + @NeverInline("Prevent register writes from floating") + private static boolean tryEnterIsolateViaThreadRegister(RegisterDumper.Context context) { + /* + * Try to determine the isolate via the thread register. Set the thread register to null so + * that we don't execute this code more than once if we trigger a recursive segfault. + */ + WriteCurrentVMThreadNode.writeCurrentVMThread(WordFactory.nullPointer()); - isolate = (Isolate) RegisterDumper.singleton().getHeapBase(context); + IsolateThread isolateThread = (IsolateThread) RegisterDumper.singleton().getThreadPointer(context); + if (isolateThread.isNonNull()) { + Isolate isolate = VMThreads.IsolateTL.get(isolateThread); if (isValid(isolate)) { - int error = CEntryPointSnippets.enterAttachFromCrashHandler(isolate); - return error == CEntryPointErrors.NO_ERROR; + if (SubstrateOptions.SpawnIsolates.getValue()) { + CEntryPointSnippets.setHeapBase(isolate); + } + + WriteCurrentVMThreadNode.writeCurrentVMThread(isolateThread); + return true; } } + return false; + } + @Uninterruptible(reason = "Thread state not set up yet.") + @NeverInline("Prevent register writes from floating") + private static boolean tryEnterIsolateViaHeapBaseRegister(RegisterDumper.Context context) { + /* + * Set the heap base register to null so that we don't execute this code more than once if + * we trigger a recursive segfault. + */ + CEntryPointSnippets.setHeapBase(WordFactory.nullPointer()); + + Isolate isolate = (Isolate) RegisterDumper.singleton().getHeapBase(context); + if (isValid(isolate)) { + int error = CEntryPointSnippets.enterAttachFromCrashHandler(isolate); + return error == CEntryPointErrors.NO_ERROR; + } return false; } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/AbstractRuntimeCodeInstaller.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/AbstractRuntimeCodeInstaller.java index 5824017ccd0e..54c96796f0cc 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/AbstractRuntimeCodeInstaller.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/AbstractRuntimeCodeInstaller.java @@ -47,13 +47,11 @@ protected Pointer allocateCodeMemory(long size) { } protected void makeCodeMemoryExecutableReadOnly(Pointer start, UnsignedWord size) { - int result = RuntimeCodeInfoAccess.makeCodeMemoryExecutableReadOnly((CodePointer) start, size); - VMError.guarantee(result == 0, "Failed to make code memory read only."); + RuntimeCodeInfoAccess.makeCodeMemoryExecutableReadOnly((CodePointer) start, size); } protected void makeCodeMemoryExecutableWritable(Pointer start, UnsignedWord size) { - int result = RuntimeCodeInfoAccess.makeCodeMemoryExecutableWritable((CodePointer) start, size); - VMError.guarantee(result == 0, "Failed to make code memory writable."); + RuntimeCodeInfoAccess.makeCodeMemoryExecutableWritable((CodePointer) start, size); } protected static void doInstallPrepared(SharedMethod method, CodeInfo codeInfo, SubstrateInstalledCode installedCode) { diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/RuntimeCodeInfoAccess.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/RuntimeCodeInfoAccess.java index 334672f9fc6a..5adc54ea46f9 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/RuntimeCodeInfoAccess.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/code/RuntimeCodeInfoAccess.java @@ -24,8 +24,6 @@ */ package com.oracle.svm.core.code; -import java.util.EnumSet; - import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.UnmanagedMemory; import org.graalvm.nativeimage.c.function.CodePointer; @@ -46,6 +44,7 @@ import com.oracle.svm.core.heap.Heap; import com.oracle.svm.core.heap.ObjectReferenceVisitor; import com.oracle.svm.core.os.CommittedMemoryProvider; +import com.oracle.svm.core.os.VirtualMemoryProvider; import com.oracle.svm.core.util.DuplicatedInNativeCode; import com.oracle.svm.core.util.VMError; @@ -235,12 +234,23 @@ private static void releaseCodeMemory(CodePointer codeStart, UnsignedWord codeSi CommittedMemoryProvider.get().freeExecutableMemory(codeStart, codeSize, WordFactory.unsigned(SubstrateOptions.codeAlignment())); } - public static int makeCodeMemoryExecutableReadOnly(CodePointer codeStart, UnsignedWord codeSize) { - return CommittedMemoryProvider.get().protect(codeStart, codeSize, EnumSet.of(CommittedMemoryProvider.Access.READ, CommittedMemoryProvider.Access.EXECUTE)); + public static void makeCodeMemoryExecutableReadOnly(CodePointer codeStart, UnsignedWord codeSize) { + protectCodeMemory(codeStart, codeSize, VirtualMemoryProvider.Access.READ | VirtualMemoryProvider.Access.EXECUTE); + } + + public static void makeCodeMemoryExecutableWritable(CodePointer start, UnsignedWord size) { + VMError.guarantee(RuntimeCodeCache.Options.WriteableCodeCache.getValue(), "memory must not be writable and executable at the same time unless we have a writable code cache"); + protectCodeMemory(start, size, VirtualMemoryProvider.Access.READ | VirtualMemoryProvider.Access.WRITE | VirtualMemoryProvider.Access.EXECUTE); } - public static int makeCodeMemoryExecutableWritable(CodePointer start, UnsignedWord size) { - return CommittedMemoryProvider.get().protect(start, size, EnumSet.of(CommittedMemoryProvider.Access.READ, CommittedMemoryProvider.Access.WRITE, CommittedMemoryProvider.Access.EXECUTE)); + private static void protectCodeMemory(CodePointer codeStart, UnsignedWord codeSize, int permissions) { + int result = VirtualMemoryProvider.get().protect(codeStart, codeSize, permissions); + if (result != 0) { + throw VMError.shouldNotReachHere("Failed to modify protection of code memory. This may be caused by " + + "a. a too restrictive OS-limit of allowed memory mappings (see vm.max_map_count on Linux), " + + "b. a too strict security policy if you are running on Security-Enhanced Linux (SELinux), or " + + "c. a Native Image internal error."); + } } @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/deopt/Deoptimizer.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/deopt/Deoptimizer.java index ddd18c93344c..6a6269fa6b19 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/deopt/Deoptimizer.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/deopt/Deoptimizer.java @@ -257,6 +257,7 @@ private static RuntimeException checkDeoptimizedError0(Pointer sourceSp) { throw VMError.shouldNotReachHere("Unable to retrieve Deoptimized frame"); } + @Uninterruptible(reason = "Prevent stack walks from seeing an inconsistent stack.") private static void installDeoptimizedFrame(Pointer sourceSp, DeoptimizedFrame deoptimizedFrame) { /* * Replace the return address to the deoptimized method with a pointer to the deoptStub. diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/OutOfMemoryUtil.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/OutOfMemoryUtil.java index 5ab7d43ebeb5..07e3b5a6ade5 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/OutOfMemoryUtil.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/OutOfMemoryUtil.java @@ -31,8 +31,8 @@ import com.oracle.svm.core.headers.LibC; import com.oracle.svm.core.heap.dump.HeapDumping; import com.oracle.svm.core.jdk.JDKUtils; -import com.oracle.svm.core.jdk.UninterruptibleUtils.AtomicBoolean; import com.oracle.svm.core.log.Log; +import com.oracle.svm.core.stack.StackOverflowCheck; import com.oracle.svm.core.util.VMError; /** @@ -43,11 +43,6 @@ public class OutOfMemoryUtil { private static final OutOfMemoryError OUT_OF_MEMORY_ERROR = new OutOfMemoryError("Garbage-collected heap size exceeded. Consider increasing the maximum Java heap size, for example with '-Xmx'."); - /** - * Guard to ensure heap dump on OOME is performed at most once. - */ - private static final AtomicBoolean HEAP_DUMPED = new AtomicBoolean(false); - @RestrictHeapAccess(access = RestrictHeapAccess.Access.NO_ALLOCATION, reason = "Can't allocate when out of memory.") public static OutOfMemoryError heapSizeExceeded() { return reportOutOfMemoryError(OUT_OF_MEMORY_ERROR); @@ -56,7 +51,18 @@ public static OutOfMemoryError heapSizeExceeded() { @Uninterruptible(reason = "Not uninterruptible but it doesn't matter for the callers.", calleeMustBe = false) @RestrictHeapAccess(access = RestrictHeapAccess.Access.NO_ALLOCATION, reason = "Can't allocate while out of memory.") public static OutOfMemoryError reportOutOfMemoryError(OutOfMemoryError error) { - if (VMInspectionOptions.hasHeapDumpSupport() && SubstrateOptions.HeapDumpOnOutOfMemoryError.getValue() && HEAP_DUMPED.compareAndSet(false, true)) { + StackOverflowCheck.singleton().makeYellowZoneAvailable(); + try { + reportOutOfMemoryError0(error); + } finally { + StackOverflowCheck.singleton().protectYellowZone(); + } + throw error; + } + + @Uninterruptible(reason = "Not uninterruptible but it doesn't matter for the callers.", calleeMustBe = false) + private static void reportOutOfMemoryError0(OutOfMemoryError error) { + if (VMInspectionOptions.hasHeapDumpSupport() && SubstrateOptions.HeapDumpOnOutOfMemoryError.getValue()) { HeapDumping.singleton().dumpHeapOnOutOfMemoryError(); } @@ -68,6 +74,5 @@ public static OutOfMemoryError reportOutOfMemoryError(OutOfMemoryError error) { VMError.shouldNotReachHere("ExitOnOutOfMemoryError can only be used if the LibC support is present."); } } - throw error; } } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/dump/HeapDumpSupportImpl.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/dump/HeapDumpSupportImpl.java index 95cffbb587bd..c8f8f20f13b6 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/dump/HeapDumpSupportImpl.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/heap/dump/HeapDumpSupportImpl.java @@ -46,6 +46,7 @@ import com.oracle.svm.core.heap.Heap; import com.oracle.svm.core.heap.RestrictHeapAccess; import com.oracle.svm.core.heap.VMOperationInfos; +import com.oracle.svm.core.locks.VMMutex; import com.oracle.svm.core.log.Log; import com.oracle.svm.core.os.RawFileOperationSupport; import com.oracle.svm.core.os.RawFileOperationSupport.FileCreationMode; @@ -58,8 +59,10 @@ public class HeapDumpSupportImpl extends HeapDumping { private final HeapDumpWriter writer; private final HeapDumpOperation heapDumpOperation; + private final VMMutex outOfMemoryHeapDumpMutex = new VMMutex("outOfMemoryHeapDump"); private CCharPointer outOfMemoryHeapDumpPath; + private boolean outOfMemoryHeapDumpAttempted; @Platforms(Platform.HOSTED_ONLY.class) public HeapDumpSupportImpl(HeapDumpMetadata metadata) { @@ -84,6 +87,23 @@ public void teardownDumpHeapOnOutOfMemoryError() { @Override @RestrictHeapAccess(access = NO_ALLOCATION, reason = "OutOfMemoryError heap dumping must not allocate.") public void dumpHeapOnOutOfMemoryError() { + /* + * Try exactly once to create an out-of-memory heap dump. If another thread triggers an + * OutOfMemoryError while heap dumping is in progress, it needs to wait until heap dumping + * finishes. + */ + outOfMemoryHeapDumpMutex.lock(); + try { + if (!outOfMemoryHeapDumpAttempted) { + dumpHeapOnOutOfMemoryError0(); + outOfMemoryHeapDumpAttempted = true; + } + } finally { + outOfMemoryHeapDumpMutex.unlock(); + } + } + + private void dumpHeapOnOutOfMemoryError0() { CCharPointer path = outOfMemoryHeapDumpPath; if (path.isNull()) { Log.log().string("OutOfMemoryError heap dumping failed because the heap dump file path could not be allocated.").newline(); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/RuntimeSupport.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/RuntimeSupport.java index d6ea31d654f0..211d550f8747 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/RuntimeSupport.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/RuntimeSupport.java @@ -133,7 +133,7 @@ public static void executeInitializationHooks() { /** * Adds a hook which will execute during isolate tear-down. Note it is possible for the - * {@link #tearDownHooks} to called without the {@link #initializationHooks} executing first. + * {@link #tearDownHooks} to be called without the {@link #initializationHooks} executing first. */ public void addTearDownHook(Hook tearDownHook) { addHook(tearDownHooks, tearDownHook); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrThreadRepository.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrThreadRepository.java index 89f61a338fcc..fa8b9ffc7ff0 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrThreadRepository.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jfr/JfrThreadRepository.java @@ -39,6 +39,7 @@ import com.oracle.svm.core.thread.JavaLangThreadGroupSubstitutions; import com.oracle.svm.core.thread.JavaThreads; import com.oracle.svm.core.thread.PlatformThreads; +import com.oracle.svm.core.thread.Target_java_lang_Thread; import com.oracle.svm.core.thread.VMOperation; import com.oracle.svm.core.thread.VMThreads; @@ -79,6 +80,10 @@ public void registerRunningThreads() { assert VMOperation.isInProgressAtSafepoint(); assert SubstrateJVM.get().isRecording(); + /* Register the virtual thread group unconditionally. */ + long virtualThreadGroupId = registerThreadGroup0(Target_java_lang_Thread.virtualThreadGroup()); + assert virtualThreadGroupId == VIRTUAL_THREAD_GROUP_ID; + for (IsolateThread isolateThread = VMThreads.firstThread(); isolateThread.isNonNull(); isolateThread = VMThreads.nextThread(isolateThread)) { /* * IsolateThreads without a Java thread just started executing and will register diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/log/RealLog.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/log/RealLog.java index 4c490be18d0b..ed6a932ef2cd 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/log/RealLog.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/log/RealLog.java @@ -648,7 +648,12 @@ public Log exception(Throwable t, int maxFrames) { } Throwable cur = t; - do { + int maxCauses = 25; + for (int i = 0; i < maxCauses && cur != null; i++) { + if (i > 0) { + newline().string("Caused by: "); + } + /* * We do not want to call getMessage(), since it can be overridden by subclasses of * Throwable. So we access the raw detailMessage directly from the field in Throwable. @@ -668,23 +673,20 @@ public Log exception(Throwable t, int maxFrames) { } else { StackTraceElement[] stackTrace = JDKUtils.getRawStackTrace(cur); if (stackTrace != null) { - int i; - for (i = 0; i < stackTrace.length && i < maxFrames; i++) { - StackTraceElement element = stackTrace[i]; + int j; + for (j = 0; j < stackTrace.length && j < maxFrames; j++) { + StackTraceElement element = stackTrace[j]; if (element != null) { printJavaFrame(element.getClassName(), element.getMethodName(), element.getFileName(), element.getLineNumber()); } } - int remaining = stackTrace.length - i; + int remaining = stackTrace.length - j; printRemainingFramesCount(remaining); } } cur = JDKUtils.getRawCause(cur); - if (cur != null) { - newline().string("Caused by: "); - } - } while (cur != null); + } return this; } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/option/ValidateImageBuildOptionsFeature.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/option/ValidateImageBuildOptionsFeature.java index b7fea207a8ce..c20c7d1b8041 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/option/ValidateImageBuildOptionsFeature.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/option/ValidateImageBuildOptionsFeature.java @@ -25,15 +25,16 @@ package com.oracle.svm.core.option; import org.graalvm.collections.UnmodifiableMapCursor; -import jdk.graal.compiler.options.OptionKey; -import com.oracle.svm.core.feature.InternalFeature; import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature; +import com.oracle.svm.core.feature.InternalFeature; + +import jdk.graal.compiler.options.OptionKey; @AutomaticallyRegisteredFeature public class ValidateImageBuildOptionsFeature implements InternalFeature { @Override - public void afterRegistration(AfterRegistrationAccess access) { + public void beforeAnalysis(BeforeAnalysisAccess access) { UnmodifiableMapCursor, Object> cursor = RuntimeOptionValues.singleton().getMap().getEntries(); while (cursor.advance()) { validate(cursor.getKey()); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/AbstractCommittedMemoryProvider.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/AbstractCommittedMemoryProvider.java index 55c4add3af9e..9c2539d9a77c 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/AbstractCommittedMemoryProvider.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/AbstractCommittedMemoryProvider.java @@ -30,8 +30,6 @@ import static com.oracle.svm.core.Isolates.IMAGE_HEAP_WRITABLE_END; import static org.graalvm.word.WordFactory.nullPointer; -import java.util.EnumSet; - import jdk.graal.compiler.api.replacements.Fold; import org.graalvm.word.Pointer; import org.graalvm.word.PointerBase; @@ -41,11 +39,9 @@ import com.oracle.svm.core.SubstrateOptions; import com.oracle.svm.core.Uninterruptible; import com.oracle.svm.core.c.function.CEntryPointErrors; -import com.oracle.svm.core.code.RuntimeCodeCache; import com.oracle.svm.core.config.ConfigurationValues; import com.oracle.svm.core.heap.Heap; import com.oracle.svm.core.util.UnsignedUtils; -import com.oracle.svm.core.util.VMError; public abstract class AbstractCommittedMemoryProvider implements CommittedMemoryProvider { @Fold @@ -85,24 +81,6 @@ protected static int protectSingleIsolateImageHeap() { return CEntryPointErrors.NO_ERROR; } - @Override - public int protect(PointerBase start, UnsignedWord nbytes, EnumSet accessFlags) { - int vmAccessBits = VirtualMemoryProvider.Access.NONE; - if (accessFlags.contains(CommittedMemoryProvider.Access.READ)) { - vmAccessBits |= VirtualMemoryProvider.Access.READ; - } - if (accessFlags.contains(CommittedMemoryProvider.Access.WRITE)) { - vmAccessBits |= VirtualMemoryProvider.Access.WRITE; - } - if (accessFlags.contains(CommittedMemoryProvider.Access.EXECUTE)) { - if ((vmAccessBits & VirtualMemoryProvider.Access.WRITE) != 0 && !RuntimeCodeCache.Options.WriteableCodeCache.getValue()) { - throw VMError.shouldNotReachHere("memory should never be writable and executable at the same time"); - } - vmAccessBits |= VirtualMemoryProvider.Access.EXECUTE; - } - return VirtualMemoryProvider.get().protect(start, nbytes, vmAccessBits); - } - @Override @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) public Pointer allocateAlignedChunk(UnsignedWord nbytes, UnsignedWord alignment) { diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/CommittedMemoryProvider.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/CommittedMemoryProvider.java index c1111a02654c..47074c1c7f4a 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/CommittedMemoryProvider.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/os/CommittedMemoryProvider.java @@ -24,9 +24,6 @@ */ package com.oracle.svm.core.os; -import java.util.EnumSet; - -import jdk.graal.compiler.api.replacements.Fold; import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.c.type.WordPointer; import org.graalvm.word.Pointer; @@ -37,6 +34,8 @@ import com.oracle.svm.core.c.function.CEntryPointCreateIsolateParameters; import com.oracle.svm.core.heap.Heap; +import jdk.graal.compiler.api.replacements.Fold; + /** * A provider of ranges of committed memory, which is virtual memory that is backed by physical * memory or swap space. @@ -117,23 +116,4 @@ default void beforeGarbageCollection() { */ default void afterGarbageCollection() { } - - enum Access { - READ, - WRITE, - EXECUTE - } - - /** - * Change access permissions for a block of committed memory that was allocated with one of the - * allocation methods. - * - * @param start The start of the address range to be protected, which must be a multiple of the - * {@linkplain #getGranularity() granularity}. - * @param nbytes The size in bytes of the address range to be protected, which will be rounded - * up to a multiple of the {@linkplain #getGranularity() granularity}. - * @param access The modes in which the memory is permitted to be accessed, see {@link Access}. - * @return 0 when successful, or a non-zero implementation-specific error code. - */ - int protect(PointerBase start, UnsignedWord nbytes, EnumSet access); } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/JavaLangThreadGroupSubstitutions.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/JavaLangThreadGroupSubstitutions.java index 5ae8ac905bab..33b6dcfdf07a 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/JavaLangThreadGroupSubstitutions.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/JavaLangThreadGroupSubstitutions.java @@ -93,7 +93,8 @@ class ThreadGroupIdAccessor { @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) static long getId(Target_java_lang_ThreadGroup that) { if (that.injectedId == 0) { - that.injectedId = nextID.getAndIncrement(); + Target_java_lang_ThreadGroup virtualThreadGroup = SubstrateUtil.cast(Target_java_lang_Thread.virtualThreadGroup(), Target_java_lang_ThreadGroup.class); + that.injectedId = that == virtualThreadGroup ? JfrThreadRepository.VIRTUAL_THREAD_GROUP_ID : nextID.getAndIncrement(); } return that.injectedId; } diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/Target_java_lang_Thread.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/Target_java_lang_Thread.java index 0bc51646f8b3..99e605db3d52 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/Target_java_lang_Thread.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/Target_java_lang_Thread.java @@ -31,8 +31,6 @@ import java.util.Map; import java.util.Objects; -import jdk.graal.compiler.api.directives.GraalDirectives; -import jdk.graal.compiler.replacements.ReplacementsUtil; import org.graalvm.nativeimage.IsolateThread; import org.graalvm.nativeimage.Platforms; import org.graalvm.nativeimage.impl.InternalPlatform; @@ -53,6 +51,9 @@ import com.oracle.svm.core.monitor.MonitorSupport; import com.oracle.svm.core.util.VMError; +import jdk.graal.compiler.api.directives.GraalDirectives; +import jdk.graal.compiler.replacements.ReplacementsUtil; + @TargetClass(Thread.class) @SuppressWarnings({"unused"}) public final class Target_java_lang_Thread { @@ -176,7 +177,7 @@ public long getId() { @AnnotateOriginal @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) - static native ThreadGroup virtualThreadGroup(); + public static native ThreadGroup virtualThreadGroup(); @Uninterruptible(reason = "Called from uninterruptible code.", mayBeInlined = true) @AnnotateOriginal diff --git a/substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/isolated/IsolatedRuntimeCodeInstaller.java b/substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/isolated/IsolatedRuntimeCodeInstaller.java index 9e1bb36ba2f5..1236c845e2f7 100644 --- a/substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/isolated/IsolatedRuntimeCodeInstaller.java +++ b/substratevm/src/com.oracle.svm.graal/src/com/oracle/svm/graal/isolated/IsolatedRuntimeCodeInstaller.java @@ -162,8 +162,8 @@ protected void makeCodeMemoryExecutableReadOnly(Pointer start, UnsignedWord size } @CEntryPoint(include = CEntryPoint.NotIncludedAutomatically.class, publishAs = CEntryPoint.Publish.NotPublished) - private static int makeCodeMemoryExecutableReadOnly0(@SuppressWarnings("unused") IsolateThread targetIsolate, Pointer start, UnsignedWord size) { - return RuntimeCodeInfoAccess.makeCodeMemoryExecutableReadOnly((CodePointer) start, size); + private static void makeCodeMemoryExecutableReadOnly0(@SuppressWarnings("unused") IsolateThread targetIsolate, Pointer start, UnsignedWord size) { + RuntimeCodeInfoAccess.makeCodeMemoryExecutableReadOnly((CodePointer) start, size); } @Override @@ -172,7 +172,7 @@ protected void makeCodeMemoryExecutableWritable(Pointer start, UnsignedWord size } @CEntryPoint(include = CEntryPoint.NotIncludedAutomatically.class, publishAs = CEntryPoint.Publish.NotPublished) - private static int makeCodeMemoryExecutableWritable0(@SuppressWarnings("unused") IsolateThread targetIsolate, Pointer start, UnsignedWord size) { - return RuntimeCodeInfoAccess.makeCodeMemoryExecutableWritable((CodePointer) start, size); + private static void makeCodeMemoryExecutableWritable0(@SuppressWarnings("unused") IsolateThread targetIsolate, Pointer start, UnsignedWord size) { + RuntimeCodeInfoAccess.makeCodeMemoryExecutableWritable((CodePointer) start, size); } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java index b61004f2c439..2bbb7b5e1b7d 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/ProgressReporter.java @@ -778,7 +778,7 @@ private void printArtifacts(Map> artifacts) { return; } l().printLineSeparator(); - l().yellowBold().a("Produced artifacts:").reset().println(); + l().yellowBold().doclink("Build artifacts", "#glossary-build-artifacts").a(":").reset().println(); // Use TreeMap to sort paths alphabetically. Map> pathToTypes = new TreeMap<>(); artifacts.forEach((artifactType, paths) -> { diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageDebugInfoStripFeature.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageDebugInfoStripFeature.java index 3d454d147768..982aad62ef8e 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageDebugInfoStripFeature.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageDebugInfoStripFeature.java @@ -28,10 +28,8 @@ import java.nio.file.Files; import java.nio.file.Path; -import jdk.graal.compiler.debug.DebugContext; -import jdk.graal.compiler.debug.DebugContext.Builder; -import jdk.graal.compiler.debug.Indent; -import jdk.graal.compiler.printer.GraalDebugHandlersFactory; +import org.graalvm.nativeimage.Platform; +import org.graalvm.nativeimage.impl.InternalPlatform; import com.oracle.graal.pointsto.util.GraalAccess; import com.oracle.objectfile.ObjectFile; @@ -47,12 +45,18 @@ import com.oracle.svm.hosted.c.util.FileUtils; import com.oracle.svm.util.LogUtils; +import jdk.graal.compiler.core.common.SuppressFBWarnings; +import jdk.graal.compiler.debug.DebugContext; +import jdk.graal.compiler.debug.DebugContext.Builder; +import jdk.graal.compiler.debug.Indent; +import jdk.graal.compiler.printer.GraalDebugHandlersFactory; + @AutomaticallyRegisteredFeature public class NativeImageDebugInfoStripFeature implements InternalFeature { @Override public boolean isInConfiguration(IsInConfigurationAccess access) { - return SubstrateOptions.useDebugInfoGeneration() && SubstrateOptions.StripDebugInfo.getValue(); + return SubstrateOptions.StripDebugInfo.getValue(); } @SuppressWarnings("try") @@ -77,13 +81,17 @@ public void afterImageWrite(AfterImageWriteAccess access) { } } + @SuppressFBWarnings(value = "", justification = "FB reports null pointer dereferencing although it is not possible in this case.") private static void stripLinux(AfterImageWriteAccessImpl accessImpl) { String objcopyExe = "objcopy"; String debugExtension = ".debug"; Path imagePath = accessImpl.getImagePath(); + if (imagePath == null) { + assert !Platform.includedIn(InternalPlatform.NATIVE_ONLY.class); + return; + } + Path imageName = imagePath.getFileName(); - Path outputDirectory = imagePath.getParent(); - String debugInfoName = imageName + debugExtension; boolean objcopyAvailable = false; try { objcopyAvailable = FileUtils.executeCommand(objcopyExe, "--version") == 0; @@ -94,16 +102,21 @@ private static void stripLinux(AfterImageWriteAccessImpl accessImpl) { } if (!objcopyAvailable) { - LogUtils.warning("%s not available. Skipping generation of separate debuginfo file %s, debuginfo will remain embedded in the executable.", objcopyExe, debugInfoName); + LogUtils.warning("%s not available. The debuginfo will remain embedded in the executable.", objcopyExe); } else { try { + Path outputDirectory = imagePath.getParent(); String imageFilePath = outputDirectory.resolve(imageName).toString(); - Path debugInfoFilePath = outputDirectory.resolve(debugInfoName); - FileUtils.executeCommand(objcopyExe, "--only-keep-debug", imageFilePath, debugInfoFilePath.toString()); - BuildArtifacts.singleton().add(ArtifactType.DEBUG_INFO, debugInfoFilePath); + if (SubstrateOptions.useDebugInfoGeneration()) { + /* Generate a separate debug file before stripping the executable. */ + String debugInfoName = imageName + debugExtension; + Path debugInfoFilePath = outputDirectory.resolve(debugInfoName); + FileUtils.executeCommand(objcopyExe, "--only-keep-debug", imageFilePath, debugInfoFilePath.toString()); + BuildArtifacts.singleton().add(ArtifactType.DEBUG_INFO, debugInfoFilePath); + FileUtils.executeCommand(objcopyExe, "--add-gnu-debuglink=" + debugInfoFilePath, imageFilePath); + } Path exportedSymbolsPath = createKeepSymbolsListFile(accessImpl); FileUtils.executeCommand(objcopyExe, "--strip-all", "--keep-symbols=" + exportedSymbolsPath, imageFilePath); - FileUtils.executeCommand(objcopyExe, "--add-gnu-debuglink=" + debugInfoFilePath, imageFilePath); } catch (IOException e) { throw UserError.abort("Generation of separate debuginfo file failed", e); } catch (InterruptedException e) { @@ -114,7 +127,7 @@ private static void stripLinux(AfterImageWriteAccessImpl accessImpl) { private static Path createKeepSymbolsListFile(AfterImageWriteAccessImpl accessImpl) throws IOException { Path exportedSymbolsPath = accessImpl.getTempDirectory().resolve("keep-symbols.list").toAbsolutePath(); - Files.write(exportedSymbolsPath, accessImpl.getImageSymbols(false)); + Files.write(exportedSymbolsPath, accessImpl.getImageSymbols(true)); return exportedSymbolsPath; } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUType.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUType.java index b333a8e8f83e..5b9e66fb8ba6 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUType.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUType.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,6 +26,7 @@ import java.util.Arrays; import java.util.Comparator; +import java.util.List; import org.graalvm.nativeimage.Platform; @@ -86,4 +87,8 @@ static String getSelectedOrDefaultMArch() { return "unknown"; } } + + static List toNames(CPUType[] values) { + return Arrays.stream(values).map(CPUType::getName).toList(); + } } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeAArch64.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeAArch64.java index a32ab66e440f..23e625f00abb 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeAArch64.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeAArch64.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -133,7 +133,7 @@ public static EnumSet getCPUFeaturesForArch(String marchValue) { throw UserError.abort("Unsupported architecture '%s'. Please adjust '%s'. On AArch64, only %s are available.", marchValue, SubstrateOptionsParser.commandArgument(NativeImageOptions.MicroArchitecture, marchValue), - StringUtil.joinSingleQuoted(values())); + StringUtil.joinSingleQuoted(CPUType.toNames(values()))); } List features = new ArrayList<>(value.getFeatures()); processFeatureModifiers(features, archParts); diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeAMD64.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeAMD64.java index 0dd5f1f9efc1..dc84c524b3ac 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeAMD64.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeAMD64.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -177,7 +177,7 @@ public static EnumSet getCPUFeaturesForArch(String marchValue) { throw UserError.abort("Unsupported architecture '%s'. Please adjust '%s'. On AMD64, only %s are available.", marchValue, SubstrateOptionsParser.commandArgument(NativeImageOptions.MicroArchitecture, marchValue), - StringUtil.joinSingleQuoted(values())); + StringUtil.joinSingleQuoted(CPUType.toNames(values()))); } return value.getFeatures(); } diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeRISCV64.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeRISCV64.java index 2cfb0e334d6a..9212f4e5a6fd 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeRISCV64.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/util/CPUTypeRISCV64.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2023, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -91,7 +91,7 @@ private static CPUFeature[] getNativeOrEmpty() { name = cpuTypeName; parent = cpuTypeParentOrNull; specificFeatures = features.length > 0 ? EnumSet.copyOf(List.of(features)) : EnumSet.noneOf(CPUFeature.class); - assert parent == null || parent.getFeatures().stream().noneMatch(f -> specificFeatures.contains(f)) : "duplicate features detected but not allowed"; + assert parent == null || parent.getFeatures().stream().noneMatch(specificFeatures::contains) : "duplicate features detected but not allowed"; } @Override @@ -106,7 +106,7 @@ public CPUTypeRISCV64 getParent() { @Override public String getSpecificFeaturesString() { - return specificFeatures.stream().map(f -> f.name()).collect(Collectors.joining(" + ")); + return specificFeatures.stream().map(Enum::name).collect(Collectors.joining(" + ")); } public EnumSet getFeatures() { @@ -136,7 +136,7 @@ public static EnumSet getCPUFeaturesForArch(String marchValue) { throw UserError.abort("Unsupported architecture '%s'. Please adjust '%s'. On RISCV64, only %s are available.", marchValue, SubstrateOptionsParser.commandArgument(NativeImageOptions.MicroArchitecture, marchValue), - StringUtil.joinSingleQuoted(values())); + StringUtil.joinSingleQuoted(CPUType.toNames(values()))); } return value.getFeatures(); } diff --git a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/utils/poolparsers/ThreadGroupConstantPoolParser.java b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/utils/poolparsers/ThreadGroupConstantPoolParser.java index c7a593dbced8..29ac09f5ff36 100644 --- a/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/utils/poolparsers/ThreadGroupConstantPoolParser.java +++ b/substratevm/src/com.oracle.svm.test/src/com/oracle/svm/test/jfr/utils/poolparsers/ThreadGroupConstantPoolParser.java @@ -28,23 +28,30 @@ import java.io.IOException; +import org.junit.Assert; + +import com.oracle.svm.core.jfr.JfrThreadRepository; import com.oracle.svm.core.jfr.JfrType; import com.oracle.svm.test.jfr.utils.JfrFileParser; import com.oracle.svm.test.jfr.utils.RecordingInput; public class ThreadGroupConstantPoolParser extends AbstractRepositoryParser { public ThreadGroupConstantPoolParser(JfrFileParser parser) { - /* 0 is the null thread group, 1 is the virtual thread group. */ - super(parser, 0L, 1L); + /* 0 is the null thread group. */ + super(parser, 0L); } @Override public void parse(RecordingInput input) throws IOException { int numberOfThreadGroups = input.readInt(); for (int i = 0; i < numberOfThreadGroups; i++) { - addFoundId(input.readLong()); // ThreadGroupId. + long threadGroupId = input.readLong(); + addFoundId(threadGroupId); // ThreadGroupId. addExpectedId(JfrType.ThreadGroup, input.readLong()); // ParentThreadGroupId. - input.readUTF(); // ThreadGroupName. + String threadGroupName = input.readUTF(); // ThreadGroupName. + + /* For virtual threads, a fixed thread group id is reserved. */ + Assert.assertTrue(threadGroupId != JfrThreadRepository.VIRTUAL_THREAD_GROUP_ID || threadGroupName.equals("VirtualThreads")); } } } diff --git a/substratevm/src/com.oracle.svm.truffle/src/com/oracle/svm/truffle/TruffleFeature.java b/substratevm/src/com.oracle.svm.truffle/src/com/oracle/svm/truffle/TruffleFeature.java index b5dfccdbe3c2..3ee589aee718 100644 --- a/substratevm/src/com.oracle.svm.truffle/src/com/oracle/svm/truffle/TruffleFeature.java +++ b/substratevm/src/com.oracle.svm.truffle/src/com/oracle/svm/truffle/TruffleFeature.java @@ -100,6 +100,7 @@ import java.util.function.ToLongFunction; import java.util.function.UnaryOperator; +import jdk.graal.compiler.phases.common.InsertGuardFencesPhase; import org.graalvm.collections.Pair; import org.graalvm.nativeimage.AnnotationAccess; import org.graalvm.nativeimage.ImageSingletons; @@ -972,6 +973,15 @@ public void registerGraalPhases(Providers providers, SnippetReflectionProvider s if (hosted && HostInliningPhase.Options.TruffleHostInlining.getValue(HostedOptionValues.singleton()) && suites.getHighTier() instanceof HighTier) { suites.getHighTier().prependPhase(new SubstrateHostInliningPhase(CanonicalizerPhase.create())); } + /* + * On HotSpot, the InsertGuardFencesPhase is inserted into the mid-tier depending on the + * runtime option SpectrePHTBarriers. However, TruffleFeature registers phases during + * image-build time. Therefore, for Truffle compilations, we need to register the phase + * eagerly because the SpectrePHTBarriers options is set only at image-execution time. + */ + if (!hosted && suites.getMidTier().findPhase(InsertGuardFencesPhase.class, true) == null) { + suites.getMidTier().appendPhase(new InsertGuardFencesPhase()); + } } } diff --git a/substratevm/src/com.oracle.svm.truffle/src/com/oracle/svm/truffle/isolated/IsolateAwareTruffleCompiler.java b/substratevm/src/com.oracle.svm.truffle/src/com/oracle/svm/truffle/isolated/IsolateAwareTruffleCompiler.java index eb7f9ae904b9..3d21d1870a9b 100644 --- a/substratevm/src/com.oracle.svm.truffle/src/com/oracle/svm/truffle/isolated/IsolateAwareTruffleCompiler.java +++ b/substratevm/src/com.oracle.svm.truffle/src/com/oracle/svm/truffle/isolated/IsolateAwareTruffleCompiler.java @@ -28,13 +28,6 @@ import java.io.StringWriter; import java.util.concurrent.atomic.AtomicBoolean; -import jdk.graal.compiler.core.common.CompilationIdentifier; -import jdk.graal.compiler.core.common.SuppressFBWarnings; -import jdk.graal.compiler.nodes.PauseNode; -import jdk.graal.compiler.truffle.PartialEvaluator; -import jdk.graal.compiler.truffle.TruffleCompilation; -import jdk.graal.compiler.truffle.phases.TruffleTier; -import jdk.graal.compiler.word.Word; import org.graalvm.nativeimage.CurrentIsolate; import org.graalvm.nativeimage.Isolate; import org.graalvm.nativeimage.IsolateThread; @@ -66,6 +59,14 @@ import com.oracle.truffle.compiler.TruffleCompilationTask; import com.oracle.truffle.compiler.TruffleCompilerListener; +import jdk.graal.compiler.core.common.CompilationIdentifier; +import jdk.graal.compiler.core.common.SuppressFBWarnings; +import jdk.graal.compiler.nodes.PauseNode; +import jdk.graal.compiler.truffle.PartialEvaluator; +import jdk.graal.compiler.truffle.TruffleCompilation; +import jdk.graal.compiler.truffle.phases.TruffleTier; +import jdk.graal.compiler.word.Word; + public class IsolateAwareTruffleCompiler implements SubstrateTruffleCompiler { private static final Word ISOLATE_INITIALIZING = WordFactory.signed(-1); @@ -133,10 +134,18 @@ protected CompilerIsolateThread beforeCompilation() { Isolate isolate = getSharedIsolate(); if (isolate.isNull()) { if (sharedIsolate.compareAndSet(WordFactory.nullPointer(), (Isolate) ISOLATE_INITIALIZING)) { - CompilerIsolateThread thread = IsolatedGraalUtils.createCompilationIsolate(); - Runtime.getRuntime().addShutdownHook(new Thread(this::sharedIsolateShutdown)); - sharedIsolate.set(Isolates.getIsolate(thread)); - return thread; // (already attached) + try { + /* Adding the shutdown hook may fail if a shutdown is already in progress. */ + Runtime.getRuntime().addShutdownHook(new Thread(this::sharedIsolateShutdown)); + CompilerIsolateThread thread = IsolatedGraalUtils.createCompilationIsolate(); + sharedIsolate.set(Isolates.getIsolate(thread)); + return thread; // (already attached) + } catch (Throwable e) { + /* Reset the value so that the teardown hook doesn't hang. */ + assert sharedIsolate.get().equal(ISOLATE_INITIALIZING); + sharedIsolate.set(WordFactory.nullPointer()); + throw e; + } } isolate = getSharedIsolate(); assert isolate.isNonNull(); @@ -155,9 +164,11 @@ private Isolate getSharedIsolate() { private void sharedIsolateShutdown() { Isolate isolate = getSharedIsolate(); - CompilerIsolateThread context = (CompilerIsolateThread) Isolates.attachCurrentThread(isolate); - compilerIsolateThreadShutdown(context); - Isolates.detachThread(context); + if (isolate.isNonNull()) { + CompilerIsolateThread context = (CompilerIsolateThread) Isolates.attachCurrentThread(isolate); + compilerIsolateThreadShutdown(context); + Isolates.detachThread(context); + } } @CEntryPoint(include = CEntryPoint.NotIncludedAutomatically.class, publishAs = CEntryPoint.Publish.NotPublished) diff --git a/tools/mx.tools/suite.py b/tools/mx.tools/suite.py index e4d8bed02b50..af22d2f5cec1 100644 --- a/tools/mx.tools/suite.py +++ b/tools/mx.tools/suite.py @@ -26,7 +26,7 @@ "defaultLicense" : "GPLv2-CPE", "groupId" : "org.graalvm.tools", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "release" : False, "url" : "http://openjdk.java.net/projects/graal", "developer" : { diff --git a/truffle/external_repos/simplelanguage/pom.xml b/truffle/external_repos/simplelanguage/pom.xml index e33816257dc6..1797a1e618b3 100644 --- a/truffle/external_repos/simplelanguage/pom.xml +++ b/truffle/external_repos/simplelanguage/pom.xml @@ -47,7 +47,7 @@ UTF-8 jdt_apt - 24.0.0-dev + 24.0.1-dev 17 17 org.graalvm.sl.launcher/com.oracle.truffle.sl.launcher.SLMain diff --git a/truffle/external_repos/simpletool/pom.xml b/truffle/external_repos/simpletool/pom.xml index afde0af17a67..f4be91c70b3e 100644 --- a/truffle/external_repos/simpletool/pom.xml +++ b/truffle/external_repos/simpletool/pom.xml @@ -48,7 +48,7 @@ ${graalvm.version} simpletool - 24.0.0-dev + 24.0.1-dev UTF-8 17 17 diff --git a/truffle/mx.truffle/suite.py b/truffle/mx.truffle/suite.py index 9f6b2ad9e016..0e4784eb1833 100644 --- a/truffle/mx.truffle/suite.py +++ b/truffle/mx.truffle/suite.py @@ -41,7 +41,7 @@ suite = { "mxversion": "7.0.3", "name" : "truffle", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "release" : False, "groupId" : "org.graalvm.truffle", "sourceinprojectwhitelist" : [], diff --git a/truffle/src/com.oracle.truffle.api.debug/src/com/oracle/truffle/api/debug/DebuggerSession.java b/truffle/src/com.oracle.truffle.api.debug/src/com/oracle/truffle/api/debug/DebuggerSession.java index 3e14616522b9..a81b1c786507 100644 --- a/truffle/src/com.oracle.truffle.api.debug/src/com/oracle/truffle/api/debug/DebuggerSession.java +++ b/truffle/src/com.oracle.truffle.api.debug/src/com/oracle/truffle/api/debug/DebuggerSession.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016, 2023, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2016, 2024, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * The Universal Permissive License (UPL), Version 1.0 @@ -1133,15 +1133,25 @@ public Caller visitFrame(FrameInstance frameInstance) { if (!SuspendedEvent.isEvalRootStackFrame(session, frameInstance) && (depth++ == 0)) { return null; } + Node callNode = frameInstance.getCallNode(); - while (callNode != null && !SourceSectionFilter.ANY.includes(callNode)) { - callNode = callNode.getParent(); - } + RootNode rootNode; if (callNode == null) { - return null; + // GR-52192 temporary workaround for Espresso, where a meaningful call node + // cannot always be set as encapsulated node reference. + rootNode = ((RootCallTarget) frameInstance.getCallTarget()).getRootNode(); + callNode = rootNode; + } else { + while (callNode != null && !SourceSectionFilter.ANY.includes(callNode)) { + callNode = callNode.getParent(); + } + rootNode = callNode != null ? callNode.getRootNode() : null; + if (rootNode == null) { + // can't handle disconnected call nodes + return null; + } } - RootNode root = callNode.getRootNode(); - if (root == null || !includeInternal && root.isInternal()) { + if (!includeInternal && rootNode.isInternal()) { return null; } return new Caller(frameInstance, callNode); diff --git a/truffle/src/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/polyglot/FileSystemsTest.java b/truffle/src/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/polyglot/FileSystemsTest.java index 32adfe0011b4..c7fd137dbe37 100644 --- a/truffle/src/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/polyglot/FileSystemsTest.java +++ b/truffle/src/com.oracle.truffle.api.test/src/com/oracle/truffle/api/test/polyglot/FileSystemsTest.java @@ -2044,7 +2044,7 @@ public void testSetAttribute() throws IOException { boolean canRead = cfg.canRead(); boolean canWrite = cfg.canWrite(); AbstractExecutableTestLanguage.evalTestLanguage(ctx, TestSetAttributeLanguage.class, "", configuration, path, usePublicFile, canRead, canWrite, supportsUnixAttributes(), - supportsSetLastAccessTime()); + supportsSetLastAccessTime(), supportsSetCreationTime()); } @Registration @@ -2059,6 +2059,7 @@ protected Object execute(RootNode node, Env env, Object[] contextArguments, Obje boolean canWrite = (boolean) contextArguments[4]; boolean supportsUnixAttributes = (boolean) contextArguments[5]; boolean supportsSetLastAccessTime = (boolean) contextArguments[6]; + boolean supportsSetCreationTime = (boolean) contextArguments[7]; TruffleFile root = resolve(env, usePublicFile, path); try { TruffleFile file = root.resolve(FILE_CHANGE_ATTRS); @@ -2067,14 +2068,18 @@ protected Object execute(RootNode node, Env env, Object[] contextArguments, Obje Assert.assertTrue(formatErrorMessage("Expected SecurityException", configurationName, path), canWrite); Assert.assertEquals(time, file.getAttribute(TruffleFile.LAST_MODIFIED_TIME)); Assert.assertTrue(formatErrorMessage("Expected SecurityException", configurationName, path), canRead); + file.setAttribute(TruffleFile.LAST_ACCESS_TIME, time); + FileTime lastAccessTime = file.getAttribute(TruffleFile.LAST_ACCESS_TIME); // Workaround for issue JDK-8298187: The file last access time does not work on // JDK-20 on macOS with the hfs file system. if (supportsSetLastAccessTime) { - file.setAttribute(TruffleFile.LAST_ACCESS_TIME, time); - Assert.assertEquals(time, file.getAttribute(TruffleFile.LAST_ACCESS_TIME)); + Assert.assertEquals(time, lastAccessTime); } file.setAttribute(TruffleFile.CREATION_TIME, time); - Assert.assertEquals(time, file.getAttribute(TruffleFile.CREATION_TIME)); + FileTime creationTime = file.getAttribute(TruffleFile.CREATION_TIME); + if (supportsSetCreationTime) { + Assert.assertEquals(time, creationTime); + } file.setAttribute(TruffleFile.UNIX_PERMISSIONS, EnumSet.of(PosixFilePermission.OWNER_READ)); Assert.assertEquals(EnumSet.of(PosixFilePermission.OWNER_READ), file.getAttribute(TruffleFile.UNIX_PERMISSIONS)); file.setAttribute(TruffleFile.UNIX_PERMISSIONS, EnumSet.of(PosixFilePermission.OWNER_READ)); @@ -2106,6 +2111,17 @@ private boolean supportsSetLastAccessTime() throws IOException { return true; } + /** + * Returns {@code true} if the operating system supports file creation time modification. Note: + * Posix does not support setting a file's creation time directly. MacOS and BSD Unix, however, + * provide an additional system call {@code fsetattrlist} utilized by Java NIO to set the + * creation time. On Linux, the Posix functions {@code utimes}, {@code futimens}, or + * {@code utimensat} are employed, allowing modification only of access and modification times. + */ + private static boolean supportsSetCreationTime() { + return OSUtils.isWindows() || OSUtils.getCurrent() == OSUtils.OS.Darwin; + } + @Test public void testGetAttributes() throws IOException { Context ctx = cfg.getContext(); diff --git a/vm/ci/ci_common/common.jsonnet b/vm/ci/ci_common/common.jsonnet index 1140e87400af..fd31a877ac8c 100644 --- a/vm/ci/ci_common/common.jsonnet +++ b/vm/ci/ci_common/common.jsonnet @@ -205,7 +205,7 @@ local devkits = graal_common.devkits; mx_vm_cmd_suffix: ['--sources=sdk:GRAAL_SDK,truffle:TRUFFLE_API,compiler:GRAAL,substratevm:SVM', '--debuginfo-dists', '--base-jdk-info=${BASE_JDK_NAME}:${BASE_JDK_VERSION}'], mx_vm_common: vm.mx_cmd_base_no_env + ['--env', '${VM_ENV}'] + self.mx_vm_cmd_suffix, - mx_vm_installables: vm.mx_cmd_base_no_env + ['--env', '${VM_ENV}-complete'] + self.mx_vm_cmd_suffix, + mx_vm_complete: vm.mx_cmd_base_no_env + ['--env', '${VM_ENV}-complete'] + self.mx_vm_cmd_suffix, svm_common_linux_amd64: graal_common.deps.svm, svm_common_linux_aarch64: graal_common.deps.svm, @@ -225,13 +225,16 @@ local devkits = graal_common.devkits; deploy_sdk_base_dry_run(os, base_dist_name=null): [self.mx_vm_common + vm.vm_profiles + self.maven_deploy_sdk_base_dry_run, self.mx_vm_common + vm.vm_profiles + self.artifact_deploy_sdk_base_dry_run(os, base_dist_name)], deploy_sdk_components(os, tags): [ - $.mx_vm_installables + self.maven_deploy_sdk + ['--tags', tags, vm.binaries_repository], - $.mx_vm_installables + self.deploy_artifacts_sdk(os) + ['--tags', tags] + $.mx_vm_complete + self.maven_deploy_sdk + ['--tags', tags, vm.binaries_repository], + $.mx_vm_complete + self.deploy_artifacts_sdk(os) + ['--tags', tags] ], - maven_deploy_sdk_components_dry_run: self.maven_deploy_sdk + ['--tags', 'installable,standalone', '--dry-run', vm.binaries_repository], - artifact_deploy_sdk_components_dry_run(os): self.deploy_artifacts_sdk(os) + ['--tags', 'installable,standalone', '--dry-run'], - deploy_sdk_components_dry_run(os): [$.mx_vm_installables + self.maven_deploy_sdk_components_dry_run, $.mx_vm_installables + self.artifact_deploy_sdk_components_dry_run(os)], + maven_deploy_sdk_components_dry_run: self.maven_deploy_sdk + ['--tags', 'standalone', '--dry-run', vm.binaries_repository], + artifact_deploy_sdk_components_dry_run(os): self.deploy_artifacts_sdk(os) + ['--tags', 'standalone', '--dry-run'], + deploy_sdk_components_dry_run(os): [ + $.mx_vm_complete + self.maven_deploy_sdk_components_dry_run, + $.mx_vm_complete + self.artifact_deploy_sdk_components_dry_run(os) + ], ruby_vm_build_linux_amd64: self.svm_common_linux_amd64 + self.sulong_linux + self.truffleruby_linux_amd64 + vm.custom_vm_linux, ruby_vm_build_linux_aarch64: self.svm_common_linux_aarch64 + self.sulong_linux + self.truffleruby_linux_aarch64 + vm.custom_vm_linux, @@ -589,26 +592,24 @@ local devkits = graal_common.devkits; timelimit: "1:00:00" }, - deploy_graalvm_components(java_version, installables, standalones, record_file_sizes=false): vm.check_structure + { + deploy_graalvm_components(java_version, standalones, record_file_sizes=false): vm.check_structure + { build_deps:: std.join(',', [] + (if (record_file_sizes) then ['GRAALVM'] else []) - + (if (installables) then ['GRAALVM_INSTALLABLES'] else []) + (if (standalones) then ['GRAALVM_STANDALONES'] else []) ), tags:: std.join(',', [] - + (if (installables) then ['installable'] else []) + (if (standalones) then ['standalone'] else []) ), run: $.patch_env(self.os, self.arch, java_version) + [ - $.mx_vm_installables + ['graalvm-show'], - $.mx_vm_installables + ['build', '--dependencies', self.build_deps], + $.mx_vm_complete + ['graalvm-show'], + $.mx_vm_complete + ['build', '--dependencies', self.build_deps], ] + $.deploy_sdk_components(self.os, self.tags) + ( if (record_file_sizes) then [ - $.mx_vm_installables + $.record_file_sizes, + $.mx_vm_complete + $.record_file_sizes, $.upload_file_sizes, ] else [] ), @@ -633,52 +634,49 @@ local devkits = graal_common.devkits; }, # - # Deploy GraalVM Base and Installables + # Deploy GraalVM Base and Standalones # NOTE: After adding or removing deploy jobs, please make sure you modify ce-release-artifacts.json accordingly. # # Linux/AMD64 # - JDK-Latest deploy_vm_base_javaLatest_linux_amd64: vm.vm_java_Latest + self.full_vm_build_linux_amd64 + self.linux_deploy + self.vm_base('linux', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_base('latest') + {name: 'post-merge-deploy-vm-base-java-latest-linux-amd64', notify_groups:: ["deploy"]}, - deploy_vm_installables_standalones_javaLatest_linux_amd64: vm.vm_java_Latest + self.full_vm_build_linux_amd64 + self.linux_deploy + self.vm_base('linux', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_components('latest', installables=false, standalones=true, record_file_sizes=true) + {name: 'post-merge-deploy-vm-installables-standalones-java-latest-linux-amd64', notify_groups:: ["deploy"]}, + deploy_vm_standalones_javaLatest_linux_amd64: vm.vm_java_Latest + self.full_vm_build_linux_amd64 + self.linux_deploy + self.vm_base('linux', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_components('latest', standalones=true, record_file_sizes=true) + {name: 'post-merge-deploy-vm-standalones-java-latest-linux-amd64', notify_groups:: ["deploy"]}, # - JDK21 deploy_vm_base_java21_linux_amd64: vm.vm_java_21 + self.full_vm_build_linux_amd64 + self.linux_deploy + self.vm_base('linux', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_base("java21") + {name: 'post-merge-deploy-vm-base-java21-linux-amd64', notify_groups:: ["deploy"]}, - deploy_vm_installables_standalones_java21_linux_amd64: vm.vm_java_21_llvm + self.full_vm_build_linux_amd64 + self.linux_deploy + self.vm_base('linux', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", installables=true, standalones=true, record_file_sizes=true) + {name: 'post-merge-deploy-vm-installables-standalones-java21-linux-amd64', notify_groups:: ["deploy"]}, + deploy_vm_standalones_java21_linux_amd64: vm.vm_java_21_llvm + self.full_vm_build_linux_amd64 + self.linux_deploy + self.vm_base('linux', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", standalones=true, record_file_sizes=true) + {name: 'post-merge-deploy-vm-standalones-java21-linux-amd64', notify_groups:: ["deploy"]}, # Linux/AARCH64 # - JDK-Latest deploy_vm_base_javaLatest_linux_aarch64: vm.vm_java_Latest + self.full_vm_build_linux_aarch64 + self.linux_deploy + self.vm_base('linux', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_base('latest') + {name: 'post-merge-deploy-vm-base-java-latest-linux-aarch64', notify_groups:: ["deploy"], timelimit: '1:30:00', capabilities+: ["!xgene3"]}, - deploy_vm_installables_standalones_javaLatest_linux_aarch64: vm.vm_java_Latest + self.full_vm_build_linux_aarch64 + self.linux_deploy + self.vm_base('linux', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components('latest', installables=false, standalones=true) + {name: 'post-merge-deploy-vm-installables-standalones-java-latest-linux-aarch64', notify_groups:: ["deploy"], capabilities+: ["!xgene3"]}, + deploy_vm_standalones_javaLatest_linux_aarch64: vm.vm_java_Latest + self.full_vm_build_linux_aarch64 + self.linux_deploy + self.vm_base('linux', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components('latest', standalones=true) + {name: 'post-merge-deploy-vm-standalones-java-latest-linux-aarch64', notify_groups:: ["deploy"], capabilities+: ["!xgene3"]}, # - JDK21 deploy_vm_base_java21_linux_aarch64: vm.vm_java_21 + self.full_vm_build_linux_aarch64 + self.linux_deploy + self.vm_base('linux', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_base("java21") + {name: 'post-merge-deploy-vm-base-java21-linux-aarch64', notify_groups:: ["deploy"], timelimit: '1:30:00', capabilities+: ["!xgene3"]}, - deploy_vm_installables_standalones_java21_linux_aarch64: vm.vm_java_21 + self.full_vm_build_linux_aarch64 + self.linux_deploy + self.vm_base('linux', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", installables=true, standalones=true) + {name: 'post-merge-deploy-vm-installables-standalones-java21-linux-aarch64', notify_groups:: ["deploy"], capabilities+: ["!xgene3"]}, + deploy_vm_standalones_java21_linux_aarch64: vm.vm_java_21 + self.full_vm_build_linux_aarch64 + self.linux_deploy + self.vm_base('linux', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", standalones=true) + {name: 'post-merge-deploy-vm-standalones-java21-linux-aarch64', notify_groups:: ["deploy"], capabilities+: ["!xgene3"]}, # Darwin/AMD64 # - JDK-Latest deploy_vm_base_javaLatest_darwin_amd64: vm.vm_java_Latest + self.full_vm_build_darwin_amd64 + self.darwin_deploy + self.vm_base('darwin', 'amd64', 'post-merge', deploy=true, jdk_hint='Latest') + self.deploy_graalvm_base('latest') + {name: 'post-merge-deploy-vm-base-java-latest-darwin-amd64', notify_groups:: ["deploy"], timelimit: '1:45:00'}, - deploy_vm_standalones_javaLatest_darwin_amd64: vm.vm_java_Latest + self.full_vm_build_darwin_amd64 + self.darwin_deploy + self.vm_base('darwin', 'amd64', 'post-merge', deploy=true, jdk_hint='Latest') + self.deploy_graalvm_components('latest', installables=false, standalones=true) + {name: 'post-merge-deploy-vm-standalones-java-latest-darwin-amd64', capabilities+: ["!macmini_late_2014"], diskspace_required: "31GB", notify_groups:: ["deploy"], timelimit: '3:00:00'}, + deploy_vm_standalones_javaLatest_darwin_amd64: vm.vm_java_Latest + self.full_vm_build_darwin_amd64 + self.darwin_deploy + self.vm_base('darwin', 'amd64', 'post-merge', deploy=true, jdk_hint='Latest') + self.deploy_graalvm_components('latest', standalones=true) + {name: 'post-merge-deploy-vm-standalones-java-latest-darwin-amd64', capabilities+: ["!macmini_late_2014"], diskspace_required: "31GB", notify_groups:: ["deploy"], timelimit: '3:00:00'}, # - JDK21 deploy_vm_base_java21_darwin_amd64: vm.vm_java_21 + self.full_vm_build_darwin_amd64 + self.darwin_deploy + self.vm_base('darwin', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_base("java21") + {name: 'post-merge-deploy-vm-base-java21-darwin-amd64', notify_groups:: ["deploy"], timelimit: '1:45:00'}, - deploy_vm_installables_java21_darwin_amd64: vm.vm_java_21_llvm + self.full_vm_build_darwin_amd64 + self.darwin_deploy + self.vm_base('darwin', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", installables=true, standalones=false) + {name: 'post-merge-deploy-vm-installables-java21-darwin-amd64', capabilities+: ["!macmini_late_2014"], diskspace_required: "31GB", notify_groups:: ["deploy"], timelimit: '3:00:00'}, - deploy_vm_standalones_java21_darwin_amd64: vm.vm_java_21_llvm + self.full_vm_build_darwin_amd64 + self.darwin_deploy + self.vm_base('darwin', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", installables=false, standalones=true) + {name: 'post-merge-deploy-vm-standalones-java21-darwin-amd64', capabilities+: ["!macmini_late_2014"], diskspace_required: "31GB", notify_groups:: ["deploy"], timelimit: '3:00:00'}, + deploy_vm_standalones_java21_darwin_amd64: vm.vm_java_21_llvm + self.full_vm_build_darwin_amd64 + self.darwin_deploy + self.vm_base('darwin', 'amd64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", standalones=true) + {name: 'post-merge-deploy-vm-standalones-java21-darwin-amd64', capabilities+: ["!macmini_late_2014"], diskspace_required: "31GB", notify_groups:: ["deploy"], timelimit: '3:00:00'}, # Darwin/AARCH64 # - JDK-Latest deploy_vm_base_javaLatest_darwin_aarch64: vm.vm_java_Latest + self.full_vm_build_darwin_aarch64 + self.darwin_deploy + self.vm_base('darwin', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_base('latest') + {name: 'post-merge-deploy-vm-base-java-latest-darwin-aarch64', notify_groups:: ["deploy"], notify_emails+: ["bernhard.urban-forster@oracle.com"], timelimit: '1:45:00'}, - deploy_vm_standalones_javaLatest_darwin_aarch64: vm.vm_java_Latest + self.full_vm_build_darwin_aarch64 + self.darwin_deploy + self.vm_base('darwin', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components('latest', installables=false, standalones=true) + {name: 'post-merge-deploy-vm-standalones-java-latest-darwin-aarch64', diskspace_required: "31GB", notify_groups:: ["deploy"], notify_emails+: ["bernhard.urban-forster@oracle.com"], timelimit: '3:00:00'}, + deploy_vm_standalones_javaLatest_darwin_aarch64: vm.vm_java_Latest + self.full_vm_build_darwin_aarch64 + self.darwin_deploy + self.vm_base('darwin', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components('latest', standalones=true) + {name: 'post-merge-deploy-vm-standalones-java-latest-darwin-aarch64', diskspace_required: "31GB", notify_groups:: ["deploy"], notify_emails+: ["bernhard.urban-forster@oracle.com"], timelimit: '3:00:00'}, # - JDK21 deploy_vm_base_java21_darwin_aarch64: vm.vm_java_21 + self.full_vm_build_darwin_aarch64 + self.darwin_deploy + self.vm_base('darwin', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_base("java21") + {name: 'post-merge-deploy-vm-base-java21-darwin-aarch64', notify_groups:: ["deploy"], notify_emails+: ["bernhard.urban-forster@oracle.com"], timelimit: '1:45:00'}, - deploy_vm_installables_java21_darwin_aarch64: vm.vm_java_21 + self.full_vm_build_darwin_aarch64 + self.darwin_deploy + self.vm_base('darwin', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", installables=true, standalones=false) + {name: 'post-merge-deploy-vm-installables-java21-darwin-aarch64', diskspace_required: "31GB", notify_groups:: ["deploy"], notify_emails+: ["bernhard.urban-forster@oracle.com"], timelimit: '3:00:00'}, - deploy_vm_standalones_java21_darwin_aarch64: vm.vm_java_21 + self.full_vm_build_darwin_aarch64 + self.darwin_deploy + self.vm_base('darwin', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", installables=false, standalones=true) + {name: 'post-merge-deploy-vm-standalones-java21-darwin-aarch64', diskspace_required: "31GB", notify_groups:: ["deploy"], notify_emails+: ["bernhard.urban-forster@oracle.com"], timelimit: '3:00:00'}, + deploy_vm_standalones_java21_darwin_aarch64: vm.vm_java_21 + self.full_vm_build_darwin_aarch64 + self.darwin_deploy + self.vm_base('darwin', 'aarch64', 'post-merge', deploy=true) + self.deploy_graalvm_components("java21", standalones=true) + {name: 'post-merge-deploy-vm-standalones-java21-darwin-aarch64', diskspace_required: "31GB", notify_groups:: ["deploy"], notify_emails+: ["bernhard.urban-forster@oracle.com"], timelimit: '3:00:00'}, # Windows/AMD64 # - JDK-Latest deploy_vm_base_javaLatest_windows_amd64: vm.vm_java_Latest + self.svm_common_windows_amd64('Latest') + self.js_windows_common + self.vm_base('windows', 'amd64', 'post-merge', deploy=true, jdk_hint='Latest') + self.deploy_graalvm_base('latest') + self.deploy_build + {name: 'post-merge-deploy-vm-base-java-latest-windows-amd64', notify_groups:: ["deploy"], timelimit: '1:30:00'}, - deploy_vm_standalones_javaLatest_windows_amd64: vm.vm_java_Latest + self.svm_common_windows_amd64('Latest') + self.js_windows_common + self.sulong_windows + self.vm_base('windows', 'amd64', 'post-merge', deploy=true, jdk_hint='Latest') + self.deploy_graalvm_components('latest', installables=false, standalones=true) + self.deploy_build + {name: 'post-merge-deploy-vm-standalones-java-latest-windows-amd64', diskspace_required: "31GB", timelimit: '2:30:00', notify_groups:: ["deploy"]}, + deploy_vm_standalones_javaLatest_windows_amd64: vm.vm_java_Latest + self.svm_common_windows_amd64('Latest') + self.js_windows_common + self.sulong_windows + self.vm_base('windows', 'amd64', 'post-merge', deploy=true, jdk_hint='Latest') + self.deploy_graalvm_components('latest', standalones=true) + self.deploy_build + {name: 'post-merge-deploy-vm-standalones-java-latest-windows-amd64', diskspace_required: "31GB", timelimit: '2:30:00', notify_groups:: ["deploy"]}, # - JDK21 deploy_vm_base_java21_windows_amd64: vm.vm_java_21 + self.svm_common_windows_amd64("21") + self.js_windows_common + self.vm_base('windows', 'amd64', 'post-merge', deploy=true, jdk_hint='21') + self.deploy_graalvm_base("java21") + self.deploy_build + {name: 'post-merge-deploy-vm-base-java21-windows-amd64', notify_groups:: ["deploy"], timelimit: '1:30:00'}, - deploy_vm_installables_java21_windows_amd64: vm.vm_java_21 + self.svm_common_windows_amd64("21") + self.js_windows_common + self.sulong_windows + self.vm_base('windows', 'amd64', 'post-merge', deploy=true, jdk_hint='21') + self.deploy_graalvm_components("java21", installables=true, standalones=false) + self.deploy_build + {name: 'post-merge-deploy-vm-installables-java21-windows-amd64', diskspace_required: "31GB", timelimit: '2:30:00', notify_groups:: ["deploy"]}, - deploy_vm_standalones_java21_windows_amd64: vm.vm_java_21 + self.svm_common_windows_amd64("21") + self.js_windows_common + self.sulong_windows + self.vm_base('windows', 'amd64', 'post-merge', deploy=true, jdk_hint='21') + self.deploy_graalvm_components("java21", installables=false, standalones=true) + self.deploy_build + {name: 'post-merge-deploy-vm-standalones-java21-windows-amd64', diskspace_required: "31GB", timelimit: '2:30:00', notify_groups:: ["deploy"]}, + deploy_vm_standalones_java21_windows_amd64: vm.vm_java_21 + self.svm_common_windows_amd64("21") + self.js_windows_common + self.sulong_windows + self.vm_base('windows', 'amd64', 'post-merge', deploy=true, jdk_hint='21') + self.deploy_graalvm_components("java21", standalones=true) + self.deploy_build + {name: 'post-merge-deploy-vm-standalones-java21-windows-amd64', diskspace_required: "31GB", timelimit: '2:30:00', notify_groups:: ["deploy"]}, # # Deploy the GraalVM Espresso artifact (GraalVM Base + espresso - native image) diff --git a/vm/ci/ci_includes/vm.jsonnet b/vm/ci/ci_includes/vm.jsonnet index a5af5bc3d96f..efa4b1671f89 100644 --- a/vm/ci/ci_includes/vm.jsonnet +++ b/vm/ci/ci_includes/vm.jsonnet @@ -37,9 +37,6 @@ local graal_common = import '../../../ci/ci_common/common.jsonnet'; short_name:: $.edition, setup+: [ ['set-export', 'VM_ENV', self.short_name], - ['set-export', 'RELEASE_CATALOG', 'https://www.graalvm.org/component-catalog/v2/graal-updater-component-catalog-java${BASE_JDK_SHORT_VERSION}.properties|{ee=GraalVM Enterprise Edition}rest://gds.oracle.com/api/20220101/'], - ['set-export', 'RELEASE_PRODUCT_ID', 'D53FAE8052773FFAE0530F15000AA6C6'], - ['set-export', 'SNAPSHOT_CATALOG', ['mx', 'urlrewrite', 'http://www.graalvm.org/catalog/ce/java${BASE_JDK_SHORT_VERSION}']], ['cd', $.vm_dir], ], }, @@ -55,9 +52,9 @@ local graal_common = import '../../../ci/ci_common/common.jsonnet'; ], runAfter: [ 'post-merge-deploy-vm-base-java-latest-linux-amd64', - 'post-merge-deploy-vm-installables-standalones-java-latest-linux-amd64', + 'post-merge-deploy-vm-standalones-java-latest-linux-amd64', 'post-merge-deploy-vm-base-java-latest-linux-aarch64', - 'post-merge-deploy-vm-installables-standalones-java-latest-linux-aarch64', + 'post-merge-deploy-vm-standalones-java-latest-linux-aarch64', 'post-merge-deploy-vm-base-java-latest-darwin-amd64', 'post-merge-deploy-vm-standalones-java-latest-darwin-amd64', 'post-merge-deploy-vm-base-java-latest-darwin-aarch64', @@ -189,25 +186,25 @@ local graal_common = import '../../../ci/ci_common/common.jsonnet'; # - # Deploy GraalVM Base and Installables + # Deploy GraalVM Base and Standalones # NOTE: After adding or removing deploy jobs, please make sure you modify ce-release-artifacts.json accordingly. # # Linux/AMD64 # - JDK-Latest vm_common.deploy_vm_base_javaLatest_linux_amd64, - vm_common.deploy_vm_installables_standalones_javaLatest_linux_amd64, + vm_common.deploy_vm_standalones_javaLatest_linux_amd64, # - JDK21 vm_common.deploy_vm_base_java21_linux_amd64, - vm_common.deploy_vm_installables_standalones_java21_linux_amd64, + vm_common.deploy_vm_standalones_java21_linux_amd64, # Linux/AARCH64 # - JDK-Latest vm_common.deploy_vm_base_javaLatest_linux_aarch64, - vm_common.deploy_vm_installables_standalones_javaLatest_linux_aarch64, + vm_common.deploy_vm_standalones_javaLatest_linux_aarch64, # - JDK21 vm_common.deploy_vm_base_java21_linux_aarch64, - vm_common.deploy_vm_installables_standalones_java21_linux_aarch64, + vm_common.deploy_vm_standalones_java21_linux_aarch64, # Darwin/AMD64 # - JDK-Latest @@ -215,8 +212,7 @@ local graal_common = import '../../../ci/ci_common/common.jsonnet'; vm_common.deploy_vm_standalones_javaLatest_darwin_amd64, # - JDK21 vm_common.deploy_vm_base_java21_darwin_amd64, - vm_common.deploy_vm_installables_java21_darwin_amd64, - vm_common.deploy_vm_standalones_java21_darwin_amd64, + vm_common.deploy_vm_standalones_java21_darwin_amd64, # Darwin/AARCH64 # - JDK-Latest @@ -224,7 +220,6 @@ local graal_common = import '../../../ci/ci_common/common.jsonnet'; vm_common.deploy_vm_standalones_javaLatest_darwin_aarch64, # - JDK21 vm_common.deploy_vm_base_java21_darwin_aarch64, - vm_common.deploy_vm_installables_java21_darwin_aarch64, vm_common.deploy_vm_standalones_java21_darwin_aarch64, # Windows/AMD64 @@ -233,7 +228,6 @@ local graal_common = import '../../../ci/ci_common/common.jsonnet'; vm_common.deploy_vm_standalones_javaLatest_windows_amd64, # - JDK21 vm_common.deploy_vm_base_java21_windows_amd64, - vm_common.deploy_vm_installables_java21_windows_amd64, vm_common.deploy_vm_standalones_java21_windows_amd64, # diff --git a/vm/mx.vm/ce-aarch64-complete b/vm/mx.vm/ce-aarch64-complete index f6baf4ac45a5..2707eed95963 100644 --- a/vm/mx.vm/ce-aarch64-complete +++ b/vm/mx.vm/ce-aarch64-complete @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/espresso,/graal-js,/graal-nodejs,/regex,/sdk,/substratevm,/sulong,/tools,/truffle,/wasm,graalpython,truffleruby -COMPONENTS=antlr4,cmp,cov,dap,gu,gvm,gwa,icu4j,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,rby,rbyl,rgx,sdk,sdkl,svm,svmt,svml,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm +COMPONENTS=antlr4,cmp,cov,dap,gvm,gwa,icu4j,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,rby,rbyl,rgx,sdk,sdkl,svm,svmt,svml,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm NATIVE_IMAGES=lib:pythonvm,graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld,lib:jsvm,lib:javavm,lib:graal-nodejs,lib:jvmcicompiler,lib:native-image-agent,lib:native-image-diagnostics-agent,lib:llvmvm,native-image,lib:rubyvm,lib:wasmvm DISABLE_INSTALLABLES=False diff --git a/vm/mx.vm/ce-complete b/vm/mx.vm/ce-complete index e7d93e84b8f1..980ae334c3c9 100644 --- a/vm/mx.vm/ce-complete +++ b/vm/mx.vm/ce-complete @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/espresso,/graal-js,/graal-nodejs,/regex,/sdk,/substratevm,/sulong,/tools,/truffle,/wasm,fastr,graalpython,truffleruby -COMPONENTS=antlr4,cmp,cov,dap,gu,gvm,gwa,icu4j,xz,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,nfi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,R,rby,rbyl,rgx,sdk,sdkl,svm,svmt,svml,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm +COMPONENTS=antlr4,cmp,cov,dap,gvm,gwa,icu4j,xz,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,nfi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,R,rby,rbyl,rgx,sdk,sdkl,svm,svmt,svml,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm NATIVE_IMAGES=lib:pythonvm,graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld,lib:jsvm,lib:javavm,lib:graal-nodejs,lib:jvmcicompiler,lib:native-image-agent,lib:native-image-diagnostics-agent,lib:llvmvm,native-image,lib:rubyvm,lib:wasmvm DISABLE_INSTALLABLES=false diff --git a/vm/mx.vm/ce-darwin-aarch64-complete b/vm/mx.vm/ce-darwin-aarch64-complete index 617300d1dd2f..2dee06d7f1b2 100644 --- a/vm/mx.vm/ce-darwin-aarch64-complete +++ b/vm/mx.vm/ce-darwin-aarch64-complete @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/espresso,/graal-js,/graal-nodejs,/regex,/sdk,/substratevm,/sulong,/tools,/truffle,/wasm,graalpython,truffleruby -COMPONENTS=antlr4,cmp,cov,dap,gu,gvm,gwa,icu4j,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,nfi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,rby,rbyl,rgx,sdk,sdkl,svm,svmt,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm +COMPONENTS=antlr4,cmp,cov,dap,gvm,gwa,icu4j,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,nfi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,rby,rbyl,rgx,sdk,sdkl,svm,svmt,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm NATIVE_IMAGES=lib:pythonvm,graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld,lib:jsvm,lib:javavm,lib:graal-nodejs,lib:jvmcicompiler,lib:native-image-agent,lib:native-image-diagnostics-agent,lib:llvmvm,native-image,lib:rubyvm,lib:wasmvm DISABLE_INSTALLABLES=false diff --git a/vm/mx.vm/ce-darwin-complete b/vm/mx.vm/ce-darwin-complete index 43434dc25f37..37d668469214 100644 --- a/vm/mx.vm/ce-darwin-complete +++ b/vm/mx.vm/ce-darwin-complete @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/espresso,/graal-js,/graal-nodejs,/regex,/sdk,/substratevm,/sulong,/tools,/truffle,/wasm,graalpython,truffleruby -COMPONENTS=antlr4,cmp,cov,dap,gu,gvm,gwa,icu4j,xz,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,nfi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,rby,rbyl,rgx,sdk,sdkl,svm,svmt,svml,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm +COMPONENTS=antlr4,cmp,cov,dap,gvm,gwa,icu4j,xz,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,nfi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,rby,rbyl,rgx,sdk,sdkl,svm,svmt,svml,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm NATIVE_IMAGES=lib:pythonvm,graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld,lib:jsvm,lib:javavm,lib:graal-nodejs,lib:jvmcicompiler,lib:native-image-agent,lib:native-image-diagnostics-agent,lib:llvmvm,native-image,lib:rubyvm,lib:wasmvm DISABLE_INSTALLABLES=false diff --git a/vm/mx.vm/ce-fastr b/vm/mx.vm/ce-fastr index bef5f80c51e6..1fe02ea7729e 100644 --- a/vm/mx.vm/ce-fastr +++ b/vm/mx.vm/ce-fastr @@ -1,5 +1,5 @@ DYNAMIC_IMPORTS=/compiler,/graal-js,/sdk,/substratevm,/sulong,/tools,/truffle,fastr -COMPONENTS=antlr4,xz,R,cmp,cov,dap,gu,gvm,ins,insight,insightheap,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,ni,nic,poly,polynative,pro,sdk,sdkl,svmt,svmnfi,tfl,tfla,tflc,tflm,truffle-json +COMPONENTS=antlr4,xz,R,cmp,cov,dap,gvm,ins,insight,insightheap,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,ni,nic,poly,polynative,pro,sdk,sdkl,svmt,svmnfi,tfl,tfla,tflc,tflm,truffle-json NATIVE_IMAGES=lib:jvmcicompiler NON_REBUILDABLE_IMAGES=lib:jvmcicompiler DISABLE_INSTALLABLES=False diff --git a/vm/mx.vm/ce-js b/vm/mx.vm/ce-js index b82d4baaa5a8..63da11084b9b 100644 --- a/vm/mx.vm/ce-js +++ b/vm/mx.vm/ce-js @@ -1,5 +1,5 @@ DYNAMIC_IMPORTS=/compiler,/graal-js,/regex,/sdk,/substratevm,/tools,/truffle -COMPONENTS=cmp,cov,dap,gu,gvm,icu4j,ins,insight,insightheap,js,jsl,jss,lg,lsp,nfi,nfi-libffi,ni,nic,nil,poly,polynative,pro,rgx,sdk,sdkl,svm,svmt,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json +COMPONENTS=cmp,cov,dap,gvm,icu4j,ins,insight,insightheap,js,jsl,jss,lg,lsp,nfi,nfi-libffi,ni,nic,nil,poly,polynative,pro,rgx,sdk,sdkl,svm,svmt,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json NATIVE_IMAGES=lib:jsvm,lib:jvmcicompiler NON_REBUILDABLE_IMAGES=lib:jvmcicompiler DISABLE_INSTALLABLES=False diff --git a/vm/mx.vm/ce-llvm b/vm/mx.vm/ce-llvm index 097813dbef66..f9eb33e85ff4 100644 --- a/vm/mx.vm/ce-llvm +++ b/vm/mx.vm/ce-llvm @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/graal-js,/sdk,/substratevm,/sulong,/tools,/truffle -COMPONENTS=antlr4,cmp,cov,dap,gu,gvm,ins,insight,insightheap,lg,llp,llrc,llrl,llrn,lsp,nfi,nfi-libffi,poly,polynative,pro,sdk,sdkl,tfl,tfla,tflc,tflm,truffle-json +COMPONENTS=antlr4,cmp,cov,dap,gvm,ins,insight,insightheap,lg,llp,llrc,llrl,llrn,lsp,nfi,nfi-libffi,poly,polynative,pro,sdk,sdkl,tfl,tfla,tflc,tflm,truffle-json NATIVE_IMAGES=graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld,lib:jvmcicompiler,lib:llvmvm DISABLE_INSTALLABLES=False diff --git a/vm/mx.vm/ce-no_native b/vm/mx.vm/ce-no_native index 3993761651eb..279961bcb44f 100644 --- a/vm/mx.vm/ce-no_native +++ b/vm/mx.vm/ce-no_native @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/graal-js,/sdk,/substratevm,/tools,/truffle -COMPONENTS=cmp,cov,dap,gu,gvm,ins,insight,insightheap,lsp,nfi-libffi,poly,polynative,pro,sdk,sdkl,tfl,tfla,tflc,tflm,truffle-json +COMPONENTS=cmp,cov,dap,gvm,ins,insight,insightheap,lsp,nfi-libffi,poly,polynative,pro,sdk,sdkl,tfl,tfla,tflc,tflm,truffle-json NATIVE_IMAGES=false DISABLE_INSTALLABLES=ni,nil diff --git a/vm/mx.vm/ce-nodejs b/vm/mx.vm/ce-nodejs index 838b28d22581..b76ac335f897 100644 --- a/vm/mx.vm/ce-nodejs +++ b/vm/mx.vm/ce-nodejs @@ -1,5 +1,5 @@ DYNAMIC_IMPORTS=/compiler,/graal-js,/graal-nodejs,/sdk,/substratevm,/tools,/truffle -COMPONENTS=cmp,cov,dap,gu,gvm,ins,insight,insightheap,js,jsl,jss,lg,lsp,nfi-libffi,njs,njsl,ni,nic,nil,poly,polynative,pro,sdk,sdkl,sjvm,svm,svmt,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json +COMPONENTS=cmp,cov,dap,gvm,ins,insight,insightheap,js,jsl,jss,lg,lsp,nfi-libffi,njs,njsl,ni,nic,nil,poly,polynative,pro,sdk,sdkl,sjvm,svm,svmt,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json NATIVE_IMAGES=graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld,lib:graal-nodejs,lib:jvmcicompiler,lib:native-image-agent,lib:native-image-diagnostics-agent,native-image NON_REBUILDABLE_IMAGES=lib:jvmcicompiler DISABLE_INSTALLABLES=False diff --git a/vm/mx.vm/ce-python b/vm/mx.vm/ce-python index 6a412a9fa3e7..5d681e66345e 100644 --- a/vm/mx.vm/ce-python +++ b/vm/mx.vm/ce-python @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/regex,/sdk,/substratevm,/sulong,/tools,/truffle,graalpython -COMPONENTS=antlr4,cmp,cov,dap,dis,gu,gvm,icu4j,xz,ins,insight,insightheap,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,pbm,pmh,poly,polynative,pro,pyn,pynl,rgx,sdk,sdkl,tfl,tfla,tflc,tflm,truffle-json +COMPONENTS=antlr4,cmp,cov,dap,dis,gvm,icu4j,xz,ins,insight,insightheap,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,pbm,pmh,poly,polynative,pro,pyn,pynl,rgx,sdk,sdkl,tfl,tfla,tflc,tflm,truffle-json NATIVE_IMAGES=lib:pythonvm,lib:jvmcicompiler,graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld DISABLE_INSTALLABLES=False diff --git a/vm/mx.vm/ce-test b/vm/mx.vm/ce-test index 6ea756afc9fb..bdca53e08b6a 100644 --- a/vm/mx.vm/ce-test +++ b/vm/mx.vm/ce-test @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/graal-js,/regex,/sdk,/substratevm,/tools,/truffle -COMPONENTS=cmp,cov,dap,dis,gu,gvm,icu4j,ins,insight,insightheap,lg,llp,lsp,nfi-libffi,ni,nic,nil,nju,njucp,poly,polynative,pro,rgx,sdk,sdkl,tfl,tfla,tflc,tflm,truffle-json +COMPONENTS=cmp,cov,dap,dis,gvm,icu4j,ins,insight,insightheap,lg,llp,lsp,nfi-libffi,ni,nic,nil,nju,njucp,poly,polynative,pro,rgx,sdk,sdkl,tfl,tfla,tflc,tflm,truffle-json NATIVE_IMAGES=graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld,lib:jvmcicompiler,lib:native-image-agent,lib:native-image-diagnostics-agent,native-image DISABLE_INSTALLABLES=llp diff --git a/vm/mx.vm/ce-win-complete b/vm/mx.vm/ce-win-complete index b23d8849c23d..6c3f3e2e1d99 100644 --- a/vm/mx.vm/ce-win-complete +++ b/vm/mx.vm/ce-win-complete @@ -1,4 +1,4 @@ DYNAMIC_IMPORTS=/compiler,/espresso,/graal-js,/graal-nodejs,/regex,/sdk,/substratevm,/sulong,/tools,/truffle,/wasm,graalpython -COMPONENTS=antlr4,cmp,cov,dap,gu,gvm,gwa,icu4j,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,nfi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,rgx,sdk,sdkl,svm,svmt,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm +COMPONENTS=antlr4,cmp,cov,dap,gvm,gwa,icu4j,ins,insight,insightheap,js,jsl,jss,lg,llp,llrc,llrl,llrn,lsp,nfi-libffi,nfi,ni,nic,nil,njs,njsl,poly,polynative,pro,pyn,pynl,rgx,sdk,sdkl,svm,svmt,svmnfi,svmsl,tfl,tfla,tflc,tflm,truffle-json,vvm NATIVE_IMAGES=lib:pythonvm,graalvm-native-binutil,graalvm-native-clang,graalvm-native-clang-cl,graalvm-native-clang++,graalvm-native-flang,graalvm-native-ld,lib:jsvm,lib:javavm,lib:graal-nodejs,lib:jvmcicompiler,lib:native-image-agent,lib:native-image-diagnostics-agent,lib:llvmvm,native-image,lib:wasmvm DISABLE_INSTALLABLES=False diff --git a/vm/mx.vm/gu-deprecated b/vm/mx.vm/gu-deprecated deleted file mode 100755 index ccf0e9476886..000000000000 --- a/vm/mx.vm/gu-deprecated +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/env bash -# -# ---------------------------------------------------------------------------------------------------- -# -# Copyright (c) 2023, 2023, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# This code is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License version 2 only, as -# published by the Free Software Foundation. Oracle designates this -# particular file as subject to the "Classpath" exception as provided -# by Oracle in the LICENSE file that accompanied this code. -# -# This code is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -# version 2 for more details (a copy is included in the LICENSE file that -# accompanied this code). -# -# You should have received a copy of the GNU General Public License version -# 2 along with this work; if not, write to the Free Software Foundation, -# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA -# or visit www.oracle.com if you need additional information or have any -# questions. -# -# ---------------------------------------------------------------------------------------------------- - -cat <nul -) -if exist %gu_post_copy_contents% ( - del /f /q %gu_post_copy_contents% >nul -) - -if "%VERBOSE_GRAALVM_LAUNCHERS%"=="true" echo on - -"%root_dir%\bin\java" %GU_OPTS% -cp "%realcp%" org.graalvm.component.installer.ComponentInstaller %* - -if errorlevel 11 ( - echo Retrying operations on locked files... - for /f "delims=|" %%f in (%gu_post_delete_list%) do ( - del /f /s /q "%%f" >nul - if exist "%%f\" ( - rd /s /q "%%f" >nul - ) - ) - - for /f "delims=| tokens=1,2" %%f in (%gu_post_copy_contents%) do ( - copy /y /b "%%g\*.*" "%%f" >nul - del /f /s /q "%%g" >nul - rd /s /q "%%g" >nul - ) -) -:end diff --git a/vm/mx.vm/mx_vm.py b/vm/mx.vm/mx_vm.py index bf6e08e2cc66..e568ce908102 100644 --- a/vm/mx.vm/mx_vm.py +++ b/vm/mx.vm/mx_vm.py @@ -43,9 +43,6 @@ """:type: mx.SourceSuite | mx.Suite""" -gu_build_args = [] # externalized to simplify extensions - - @mx.command(_suite.name, "local-path-to-url") def local_path_to_url(args): """Print the url representation of a canonicalized path""" @@ -56,54 +53,6 @@ def local_path_to_url(args): print(pathlib.Path(os.path.realpath(args.path)).as_uri()) -if mx_sdk_vm_impl.USE_LEGACY_GU: - gu_component = mx_sdk_vm.GraalVmJdkComponent( - suite=_suite, - name='Component installer', - short_name='gu', - dir_name='installer', - license_files=[], - third_party_license_files=[], - dependencies=['sdk'], - jar_distributions=[ - 'vm:INSTALLER', - 'truffle:TRUFFLE_JSON' - ], - support_distributions=['vm:INSTALLER_GRAALVM_SUPPORT'], - launcher_configs=[ - mx_sdk_vm.LauncherConfig( - destination="bin/", - jar_distributions=[ - 'vm:INSTALLER', - 'truffle:TRUFFLE_JSON' - ], - dir_jars=True, - main_class="org.graalvm.component.installer.ComponentInstaller", - link_at_build_time=False, - build_args=gu_build_args, - # Please see META-INF/native-image in the project for custom build options for native-image - is_sdk_launcher=True, - custom_launcher_script="mx.vm/gu.cmd" if mx.is_windows() else None, - ), - ], - stability="supported", - ) -else: - gu_component = mx_sdk_vm.GraalVmJdkComponent( - suite=_suite, - name='Deprecated GraalVM Updater launchers', - short_name='gu', - dir_name='installer', - provided_executables=['bin/gu.cmd' if mx.is_windows() else 'bin/gu'], - license_files=[], - third_party_license_files=[], - dependencies=[], - support_distributions=['vm:INSTALLER_DEPRECATED_GRAALVM_SUPPORT'], - stability="supported", - ) -mx_sdk_vm.register_graalvm_component(gu_component) - - mx_sdk_vm.register_graalvm_component(mx_sdk_vm.GraalVmComponent( suite=_suite, name='GraalVM license files', @@ -190,12 +139,12 @@ def local_path_to_url(args): # pylint: disable=line-too-long ce_unchained_components = ['bnative-image-configure', 'cmp', 'lg', 'ni', 'nic', 'nil', 'nr_lib_jvmcicompiler', 'sdkc', 'sdkni', 'svm', 'svmsl', 'svmt', 'tflc', 'tflsm'] -ce_components_minimal = ['bpolyglot', 'cmp', 'cov', 'dap', 'gu', 'gvm', 'ins', 'insight', 'insightheap', 'lg', 'libpoly', 'lsp', 'nfi-libffi', 'nfi', 'poly', 'polynative', 'pro', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'spolyglot', 'tfl', 'tfla', 'tflc', 'tflm', 'truffle-json'] +ce_components_minimal = ['bpolyglot', 'cmp', 'cov', 'dap', 'gvm', 'ins', 'insight', 'insightheap', 'lg', 'libpoly', 'lsp', 'nfi-libffi', 'nfi', 'poly', 'polynative', 'pro', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'spolyglot', 'tfl', 'tfla', 'tflc', 'tflm', 'truffle-json'] ce_components = ce_components_minimal + ['nr_lib_jvmcicompiler', 'bnative-image-configure', 'ni', 'nic', 'nil', 'svm', 'svmt', 'svmnfi', 'svmsl'] ce_ruby_components = ['antlr4', 'cmp', 'cov', 'dap', 'gvm', 'icu4j', 'ins', 'insight', 'insightheap', 'lg', 'llp', 'llrc', 'llrlf', 'llrn', 'lsp', 'nfi-libffi', 'nfi', 'pro', 'rby', 'rbyl', 'rgx', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'tfl', 'tfla', 'tflc', 'tflm', 'truffle-json'] -ce_python_components = ['antlr4', 'sllvmvm', 'bpolybench', 'bpolyglot', 'cmp', 'cov', 'dap', 'dis', 'gu', 'gvm', 'icu4j', 'xz', 'ins', 'insight', 'insightheap', 'lg', 'libpoly', 'llp', 'llrc', 'llrl', 'llrlf', 'llrn', 'lsp', 'nfi-libffi', 'nfi', 'pbm', 'pmh', 'poly', 'polynative', 'pro', 'pyn', 'pynl', 'rgx', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'spolyglot', 'tfl', 'tfla', 'tflc', 'tflm', 'truffle-json'] +ce_python_components = ['antlr4', 'sllvmvm', 'bpolybench', 'bpolyglot', 'cmp', 'cov', 'dap', 'dis', 'gvm', 'icu4j', 'xz', 'ins', 'insight', 'insightheap', 'lg', 'libpoly', 'llp', 'llrc', 'llrl', 'llrlf', 'llrn', 'lsp', 'nfi-libffi', 'nfi', 'pbm', 'pmh', 'poly', 'polynative', 'pro', 'pyn', 'pynl', 'rgx', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'spolyglot', 'tfl', 'tfla', 'tflc', 'tflm', 'truffle-json'] ce_fastr_components = ce_components + llvm_components + ['antlr4', 'xz', 'sllvmvm', 'llp', 'bnative-image', 'snative-image-agent', 'R', 'bRMain', 'bnative-image-configure', 'llrc', 'snative-image-diagnostics-agent', 'llrn', 'llrl', 'llrlf'] -ce_no_native_components = ['bpolyglot', 'cmp', 'cov', 'dap', 'gu', 'gvm', 'ins', 'insight', 'insightheap', 'lsp', 'nfi-libffi', 'nfi', 'polynative', 'pro', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'spolyglot', 'tfl', 'tfla', 'tflc', 'tflm', 'truffle-json', 'libpoly', 'poly'] +ce_no_native_components = ['bpolyglot', 'cmp', 'cov', 'dap', 'gvm', 'ins', 'insight', 'insightheap', 'lsp', 'nfi-libffi', 'nfi', 'polynative', 'pro', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'spolyglot', 'tfl', 'tfla', 'tflc', 'tflm', 'truffle-json', 'libpoly', 'poly'] # Main GraalVMs mx_sdk_vm.register_vm_config('community', ce_unchained_components, _suite, env_file='ce-win') @@ -215,8 +164,8 @@ def local_path_to_url(args): mx_sdk_vm.register_vm_config('ce-no_native', ce_no_native_components, _suite) mx_sdk_vm.register_vm_config('libgraal', ['cmp', 'lg', 'sdkc', 'tflc'], _suite) mx_sdk_vm.register_vm_config('toolchain-only', ['antlr4', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'tfl', 'tfla', 'tflc', 'tflm', 'nfi-libffi', 'nfi', 'cmp', 'llp', 'llrc', 'llrlf', 'llrn'], _suite) -mx_sdk_vm.register_vm_config('libgraal-bash', llvm_components + ['cmp', 'gu', 'gvm', 'lg', 'nfi-libffi', 'nfi', 'poly', 'polynative', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'tfl', 'tfla', 'tflc', 'tflm', 'bpolyglot'], _suite, env_file=False) -mx_sdk_vm.register_vm_config('toolchain-only-bash', llvm_components + ['antlr4', 'tfl', 'tfla', 'tflc', 'tflm', 'gu', 'gvm', 'polynative', 'llp', 'nfi-libffi', 'nfi', 'svml', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'llrc', 'llrlf', 'llrn', 'cmp'], _suite, env_file=False) +mx_sdk_vm.register_vm_config('libgraal-bash', llvm_components + ['cmp', 'gvm', 'lg', 'nfi-libffi', 'nfi', 'poly', 'polynative', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'tfl', 'tfla', 'tflc', 'tflm', 'bpolyglot'], _suite, env_file=False) +mx_sdk_vm.register_vm_config('toolchain-only-bash', llvm_components + ['antlr4', 'tfl', 'tfla', 'tflc', 'tflm', 'gvm', 'polynative', 'llp', 'nfi-libffi', 'nfi', 'svml', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'llrc', 'llrlf', 'llrn', 'cmp'], _suite, env_file=False) mx_sdk_vm.register_vm_config('ce', llvm_components + ['antlr4', 'java', 'libpoly', 'sjavavm', 'spolyglot', 'ejvm', 'sjsvm', 'sllvmvm', 'bnative-image', 'srubyvm', 'pynl', 'spythonvm', 'pyn', 'cmp', 'gwa', 'gwal', 'icu4j', 'xz', 'js', 'jsl', 'jss', 'lg', 'llp', 'nfi-libffi', 'nfi', 'ni', 'nil', 'pbm', 'pmh', 'pbi', 'rby', 'rbyl', 'rgx', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'llrc', 'llrn', 'llrl', 'llrlf', 'snative-image-agent', 'snative-image-diagnostics-agent', 'svm', 'svmt', 'svmnfi', 'svmsl', 'swasmvm', 'tfl', 'tfla', 'tflc', 'tflm'], _suite, env_file='polybench-ce') mx_sdk_vm.register_vm_config('ce', ['bnative-image', 'bpolybench', 'cmp', 'icu4j', 'xz', 'lg', 'nfi', 'ni', 'nil', 'pbi', 'pbm', 'pmh', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'snative-image-agent', 'snative-image-diagnostics-agent', 'svm', 'svmt', 'svmnfi', 'svmsl', 'tfl', 'tfla', 'tflc', 'tflm'], _suite, dist_name='ce', env_file='polybench-ctw-ce') mx_sdk_vm.register_vm_config('ce', ['pbm', 'pmh', 'pbi', 'ni', 'icu4j', 'xz', 'js', 'jsl', 'jss', 'lg', 'nfi-libffi', 'nfi', 'tfl', 'tfla', 'tflc', 'svm', 'svmt', 'nil', 'rgx', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'cmp', 'tflm', 'svmnfi', 'svmsl', 'bnative-image', 'sjsvm', 'snative-image-agent', 'snative-image-diagnostics-agent'], _suite, env_file='polybench-nfi-ce') @@ -225,7 +174,7 @@ def local_path_to_url(args): if mx.get_os() == 'windows': mx_sdk_vm.register_vm_config('svm', ['bnative-image', 'bnative-image-configure', 'bpolyglot', 'cmp', 'gvm', 'nfi-libffi', 'nfi', 'ni', 'nil', 'nju', 'njucp', 'nic', 'poly', 'polynative', 'rgx', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'snative-image-agent', 'snative-image-diagnostics-agent', 'svm', 'svmt', 'svmnfi', 'svmsl', 'tfl', 'tfla', 'tflc', 'tflm'], _suite, env_file=False) else: - mx_sdk_vm.register_vm_config('svm', ['bnative-image', 'bnative-image-configure', 'bpolyglot', 'cmp', 'gu', 'gvm', 'nfi-libffi', 'nfi', 'ni', 'nil', 'nju', 'njucp', 'nic', 'poly', 'polynative', 'rgx', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'snative-image-agent', 'snative-image-diagnostics-agent', 'svm', 'svmt', 'svmnfi', 'svmsl', 'svml', 'tfl', 'tfla', 'tflc', 'tflm'], _suite, env_file=False) + mx_sdk_vm.register_vm_config('svm', ['bnative-image', 'bnative-image-configure', 'bpolyglot', 'cmp', 'gvm', 'nfi-libffi', 'nfi', 'ni', 'nil', 'nju', 'njucp', 'nic', 'poly', 'polynative', 'rgx', 'sdk', 'sdkni', 'sdkc', 'sdkl', 'snative-image-agent', 'snative-image-diagnostics-agent', 'svm', 'svmt', 'svmnfi', 'svmsl', 'svml', 'tfl', 'tfla', 'tflc', 'tflm'], _suite, env_file=False) # pylint: enable=line-too-long diff --git a/vm/mx.vm/mx_vm_gate.py b/vm/mx.vm/mx_vm_gate.py index e6a8d0a1f2b0..fec2c4ceb8af 100644 --- a/vm/mx.vm/mx_vm_gate.py +++ b/vm/mx.vm/mx_vm_gate.py @@ -75,17 +75,6 @@ class VmGateTasks: truffle_unchained = 'truffle-unchained' maven_downloader = 'maven-downloader' -def _unittest_config_participant(config): - vmArgs, mainClass, mainClassArgs = config - # This is required by org.graalvm.component.installer.CatalogIterableTest - vmArgs += [ - '--add-exports=java.base/jdk.internal.loader=ALL-UNNAMED', - '--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED', - ] - return vmArgs, mainClass, mainClassArgs - -mx_unittest.add_config_participant(_unittest_config_participant) - def _get_CountUppercase_vmargs(): cp = mx.project("jdk.graal.compiler.test").classpath_repr() return ['-cp', cp, 'jdk.graal.compiler.test.CountUppercase'] diff --git a/vm/mx.vm/suite.py b/vm/mx.vm/suite.py index c86e6c578a93..7ff4d911cdce 100644 --- a/vm/mx.vm/suite.py +++ b/vm/mx.vm/suite.py @@ -1,6 +1,6 @@ suite = { "name": "vm", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "mxversion": "6.41.0", "release" : False, "groupId" : "org.graalvm", @@ -33,7 +33,7 @@ "name": "graal-nodejs", "subdir": True, "dynamic": True, - "version": "eac51cf01b8b0fb1fa8ea4dc4ff7834bebab89f3", + "version": "d1a4fb72a45e37bdfd4b018ee4d59a88c4b23dc7", "urls" : [ {"url" : "https://github.com/graalvm/graaljs.git", "kind" : "git"}, ] @@ -42,14 +42,14 @@ "name": "graal-js", "subdir": True, "dynamic": True, - "version": "eac51cf01b8b0fb1fa8ea4dc4ff7834bebab89f3", + "version": "d1a4fb72a45e37bdfd4b018ee4d59a88c4b23dc7", "urls": [ {"url": "https://github.com/graalvm/graaljs.git", "kind" : "git"}, ] }, { "name": "truffleruby", - "version": "a69cf909e42ce23399152d2e90e614f49c88e9a5", + "version": "703c2de84470cc6b8c05971b954582b6214577b3", "dynamic": True, "urls": [ {"url": "https://github.com/oracle/truffleruby.git", "kind": "git"}, @@ -65,7 +65,7 @@ }, { "name": "graalpython", - "version": "dd84460f5042bde971ed6df37565f171c853360c", + "version": "0b2a38ff709eb9e40ca7e18ba259ff925aae1cd2", "dynamic": True, "urls": [ {"url": "https://github.com/graalvm/graalpython.git", "kind": "git"}, @@ -83,36 +83,12 @@ }, "projects": { - "org.graalvm.component.installer" : { - "subDir" : "src", - "sourceDirs" : ["src"], - "javaCompliance" : "17+", - "license" : "GPLv2-CPE", - "checkstyleVersion" : "10.7.0", - "dependencies": [ - "sdk:LAUNCHER_COMMON", - "truffle:TRUFFLE_JSON", - ], - "requires" : ["java.logging"], - }, - "org.graalvm.component.installer.test" : { - "subDir" : "src", - "sourceDirs" : ["src"], - "dependencies": [ - "mx:JUNIT", - "org.graalvm.component.installer" - ], - "javaCompliance" : "17+", - "checkstyle": "org.graalvm.component.installer", - "license" : "GPLv2-CPE", - "requires" : ["java.logging"], - }, "org.graalvm.polybench" : { "subDir" : "src", "sourceDirs" : ["src"], "javaCompliance" : "17+", "license" : "GPLv2-CPE", - "checkstyle": "org.graalvm.component.installer", + "checkstyleVersion" : "10.7.0", "dependencies": [ "sdk:LAUNCHER_COMMON", "sdk:POLYGLOT", @@ -128,7 +104,7 @@ "sourceDirs" : ["src"], "javaCompliance" : "17+", "license" : "GPLv2-CPE", - "checkstyle": "org.graalvm.component.installer", + "checkstyle": "org.graalvm.polybench", "dependencies": [ "truffle:TRUFFLE_API", ], @@ -142,7 +118,7 @@ "sourceDirs" : ["src"], "javaCompliance" : "17+", "license" : "GPLv2-CPE", - "checkstyle": "org.graalvm.component.installer", + "checkstyle": "org.graalvm.polybench", "dependencies": [ "truffle:TRUFFLE_API", ], @@ -180,73 +156,9 @@ "urls" : ["https://lafo.ssw.uni-linz.ac.at/pub/graal-external-deps/visualvm/visualvm-944-linux-amd64.tar.gz"], "digest" : "sha512:72982ca01cce9dfa876687ec7b9627b81e241e6cddc8dedb976a5d06d058a067f83f5c063dc07d7ed19730ffb54af8343eae8ca0cc156353f7b18530eef73c50" }, - "ORG_NETBEANS_API_ANNOTATIONS_COMMON" : { - "digest" : "sha512:37e9cee0756a3f84e3e6352ed3d358169855d16cdda2300eb5041219c867abf886db2de41fe79c37f39123eaac310041f9a2e65aa1b9a7e8384528cfbd40de5b", - "maven" : { - "groupId" : "org.netbeans.api", - "artifactId" : "org-netbeans-api-annotations-common", - "version" : "RELEASE123", - }, - }, }, "distributions": { - "INSTALLER": { - "subDir": "src", - "mainClass": "org.graalvm.component.installer.ComponentInstaller", - "dependencies": [ - "org.graalvm.component.installer", - ], - "distDependencies": [ - "sdk:LAUNCHER_COMMON", - "truffle:TRUFFLE_JSON", - ], - "maven" : False, - }, - "INSTALLER_TESTS": { - "subDir": "src", - "dependencies": ["org.graalvm.component.installer.test"], - "exclude": [ - "mx:HAMCREST", - "mx:JUNIT", - ], - "distDependencies": [ - "INSTALLER", - ], - "maven": False, - }, - "INSTALLER_GRAALVM_SUPPORT": { - "native": True, - "platformDependent": True, - "description": "GraalVM Installer support distribution for the GraalVM", - "layout": { - "components/polyglot/.registry" : "string:", - }, - "maven": False, - }, - "INSTALLER_DEPRECATED_GRAALVM_SUPPORT": { - "native": True, - "description": "Deprecated GraalVM Updater launchers support for the GraalVM", - "platformDependent": True, - "os": { - "linux": { - "layout": { - "bin/gu": "file:mx.vm/gu-deprecated", - }, - }, - "darwin": { - "layout": { - "bin/gu": "file:mx.vm/gu-deprecated", - }, - }, - "windows": { - "layout": { - "bin/gu.cmd": "file:mx.vm/gu-deprecated.cmd", - }, - }, - }, - "maven": False, - }, "VM_GRAALVM_SUPPORT": { "native": True, "description": "VM support distribution for the GraalVM", diff --git a/vm/src/org.graalvm.component.installer.test/src/META-INF/services/org.graalvm.component.installer.ComponentArchiveReader b/vm/src/org.graalvm.component.installer.test/src/META-INF/services/org.graalvm.component.installer.ComponentArchiveReader deleted file mode 100644 index 9d8610214f8d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/META-INF/services/org.graalvm.component.installer.ComponentArchiveReader +++ /dev/null @@ -1 +0,0 @@ -org.graalvm.component.installer.DirectoryArchiveReader \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/META-INF/services/org.graalvm.component.installer.SoftwareChannel$Factory b/vm/src/org.graalvm.component.installer.test/src/META-INF/services/org.graalvm.component.installer.SoftwareChannel$Factory deleted file mode 100644 index def672b60bcd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/META-INF/services/org.graalvm.component.installer.SoftwareChannel$Factory +++ /dev/null @@ -1 +0,0 @@ -org.graalvm.component.installer.persist.test.TestCatalog diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/CatalogIterableTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/CatalogIterableTest.java deleted file mode 100644 index ca3ff9e2b7f6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/CatalogIterableTest.java +++ /dev/null @@ -1,394 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import org.graalvm.component.installer.remote.CatalogIterable; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.graalvm.component.installer.DownloadURLIterable.DownloadURLParam; -import org.graalvm.component.installer.jar.JarArchive; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.remote.FileDownloader; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.persist.test.Handler; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import org.junit.After; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; - -public class CatalogIterableTest extends CommandTestBase { - @Rule public final ProxyResource proxyResource = new ProxyResource(); - - @Override - @Before - public void setUp() throws Exception { - super.setUp(); - } - - @After - public void tearDown() throws Exception { - if (param != null) { - param.close(); - } - } - - @Test - public void testRemoteNames() throws Exception { - initRemoteComponent("persist/data/truffleruby2.jar", "test://graalvm.io/download/truffleruby.zip", "testComponent", "test"); - - assertEquals("test", param.getSpecification()); - assertEquals("testComponent", param.getDisplayName()); - assertFalse(param.isComplete()); - assertFalse(Handler.isVisited(url)); - } - - @Test - public void testCreateMetaLoader() throws Exception { - initRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", "testComponent", "test"); - - MetadataLoader ldr = param.createMetaLoader(); - ldr.setNoVerifySymlinks(false); - ldr.loadPaths(); - ldr.loadPermissions(); - ldr.loadSymlinks(); - ComponentInfo meta = ldr.getComponentInfo(); - - assertEquals("ruby", meta.getId()); - assertNull(meta.getInfoPath()); - assertNull(meta.getLicensePath()); - assertTrue(meta.getPaths().isEmpty()); - assertEquals("TruffleRuby 0.33-dev", meta.getName()); - assertEquals("0.33-dev", meta.getVersionString()); - - assertFalse(Handler.isVisited(url)); - } - - @Test - public void testCreateFileLoader() throws Exception { - initRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", "testComponent", "test"); - - MetadataLoader ldr = param.createFileLoader(); - ldr.setNoVerifySymlinks(false); - ldr.loadPaths(); - ldr.loadPermissions(); - ldr.loadSymlinks(); - ComponentInfo meta = ldr.getComponentInfo(); - - assertEquals("ruby", meta.getId()); - assertNull(meta.getInfoPath()); - assertFalse(meta.getPaths().isEmpty()); - assertEquals("TruffleRuby 0.33-dev", meta.getName()); - assertEquals("0.33-dev", meta.getVersionString()); - - assertTrue(Handler.isVisited(url)); - } - - @Test - public void testVerifyRemoteJars() throws Exception { - initRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", "testComponent", "test"); - info.setShaDigest(SystemUtils.toHashBytes("d3a45ea326b379cc3d543cc56130ee9bd395fd1c1d51a470e8c2c8af1129829c")); - - try { - exception.expect(IOException.class); - exception.expectMessage("ERR_FileDigestError"); - param.createFileLoader(); - } finally { - assertTrue(Handler.isVisited(url)); - } - } - - void addRemoteComponent(String relative, String u, boolean addParam) throws IOException { - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "0.33-dev"); - initRemoteComponent(relative, u, null, null); - catalogStorage.installed.add(info); - if (addParam) { - components.add(param); - } - } - - @Test - public void testReadComponentMetadataNoNetwork() throws Exception { - addRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", false); - textParams.add("ruby"); - CatalogIterable cit = new CatalogIterable(this, this); - assertTrue(cit.iterator().hasNext()); - for (ComponentParam p : cit) { - URL remoteU = p.createMetaLoader().getComponentInfo().getRemoteURL(); - assertEquals(url, remoteU); - } - assertFalse(Handler.isVisited(url)); - } - - @Test - public void testUnknownComponentSpecified() throws Exception { - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_UnknownComponentId"); - addRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", false); - textParams.add("r"); - CatalogIterable cit = new CatalogIterable(this, this); - assertTrue(cit.iterator().hasNext()); - cit.iterator().next(); - } - - /** - * Checks that if user mistypes a filename instead of component ID, an informative note is - * printed. - */ - @Test - public void testUnknownComponentButExistingFile() throws Exception { - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_UnknownComponentMaybeFile"); - addRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", false); - File mistyped = folder.newFile("mistyped-component.jar"); - textParams.add(mistyped.getPath()); - CatalogIterable cit = new CatalogIterable(this, this); - assertTrue(cit.iterator().hasNext()); - cit.iterator().next(); - } - - @Test - public void testMetaAccessesDirectURL() throws Exception { - addRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", false); - rparam = new DownloadURLParam(url, rparam.getDisplayName(), rparam.getSpecification(), this, false); - components.add(param); - - URL remoteU = rparam.createMetaLoader().getComponentInfo().getRemoteURL(); - assertEquals(url, remoteU); - assertTrue(Handler.isVisited(url)); - assertTrue(rparam.isComplete()); - } - - @Test - public void testDirectURLAccessedJustOnce() throws Exception { - addRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", false); - rparam = new DownloadURLParam(url, rparam.getDisplayName(), rparam.getSpecification(), this, false); - components.add(param); - - URL remoteU = rparam.createMetaLoader().getComponentInfo().getRemoteURL(); - assertEquals(url, remoteU); - assertTrue(Handler.isVisited(url)); - assertTrue(rparam.isComplete()); - - Handler.clearVisited(); - - Archive jf = rparam.getArchive(); - assertNotNull(jf); - assertFalse(Handler.isVisited(url)); - } - - @Test - public void testDirectURLJarClosedAfterMeta() throws Exception { - addRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", false); - rparam = new DownloadURLParam(url, rparam.getDisplayName(), rparam.getSpecification(), this, false); - components.add(param); - - URL remoteU = rparam.createMetaLoader().getComponentInfo().getRemoteURL(); - assertEquals(url, remoteU); - JarArchive jf = (JarArchive) rparam.getArchive(); - assertNotNull(jf.getEntry("META-INF")); - - rparam.close(); - - exception.expect(IllegalStateException.class); - jf.getEntry("META-INF"); - } - - @Test - public void testDirectURLJarClosedAfterJar() throws Exception { - addRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", false); - rparam = new DownloadURLParam(url, rparam.getDisplayName(), rparam.getSpecification(), this, false); - components.add(param); - JarArchive jf = (JarArchive) rparam.getArchive(); - assertNotNull(jf.getEntry("META-INF")); - rparam.close(); - exception.expect(IllegalStateException.class); - jf.getEntry("META-INF"); - } - - @Test - public void testURLDoesNotExist() throws Exception { - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "0.33-dev"); - addRemoteComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip", false); - textParams.add("ruby"); - Handler.bind(url.toString(), new URLConnection(url) { - @Override - public InputStream getInputStream() throws IOException { - connect(); - return clu.openStream(); - } - - @Override - public String getHeaderField(int n) { - try { - connect(); - } catch (IOException ex) { - Logger.getLogger(CatalogIterableTest.class.getName()).log(Level.SEVERE, null, ex); - } - return super.getHeaderField(n); - } - - @Override - public Map> getHeaderFields() { - try { - connect(); - } catch (IOException ex) { - Logger.getLogger(CatalogIterableTest.class.getName()).log(Level.SEVERE, null, ex); - } - return super.getHeaderFields(); - } - - @Override - public void connect() throws IOException { - throw new FileNotFoundException(); - } - }); - - CatalogIterable cit = new CatalogIterable(this, this); - ComponentParam rubyComp = cit.iterator().next(); - - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_ErrorDownloadingNotExist"); - - rubyComp.createFileLoader().getComponentInfo(); - } - - private static final String TEST_CATALOG_URL = "test://release/catalog.properties"; - private RemoteCatalogDownloader downloader; - - private void setupCatalog() throws Exception { - this.storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "19.3-dev"); - String relSpec = "commands/cataloginstallDeps.properties"; - URL u = getClass().getResource(relSpec); - Handler.bind(TEST_CATALOG_URL, u); - - downloader = new RemoteCatalogDownloader(this, this, SystemUtils.toURL(TEST_CATALOG_URL)); - this.registry = new CatalogContents(this, downloader.getStorage(), getLocalRegistry()); - } - - /** - * Checks that a parameter without wildcards will act as a literal. - */ - @Test - public void testNoWildcards() throws Exception { - setupCatalog(); - textParams.add("ruby"); - CatalogIterable cit = new CatalogIterable(this, this); - Iterator comps = cit.iterator(); - ComponentParam c; - - c = comps.next(); - assertFalse(comps.hasNext()); - assertEquals("org.graalvm.ruby", c.createMetaLoader().getComponentInfo().getId()); - } - - @Test - public void testAllComponents() throws Exception { - setupCatalog(); - textParams.add("*"); - CatalogIterable cit = new CatalogIterable(this, this); - Iterator comps = cit.iterator(); - - List fullIds = new ArrayList<>(); - for (; comps.hasNext();) { - ComponentParam cp = comps.next(); - fullIds.add(cp.createMetaLoader().getComponentInfo().getId()); - } - assertEquals(5, fullIds.size()); - } - - @Test - public void testSelectSomeComponents() throws Exception { - setupCatalog(); - textParams.add("*mage"); - textParams.add("llvm*"); - CatalogIterable cit = new CatalogIterable(this, this); - Iterator comps = cit.iterator(); - - List fullIds = new ArrayList<>(); - for (; comps.hasNext();) { - ComponentParam cp = comps.next(); - fullIds.add(cp.createMetaLoader().getComponentInfo().getId()); - } - assertEquals(2, fullIds.size()); - } - - @Test - public void testWildardSorted() throws Exception { - setupCatalog(); - textParams.add("r*"); - CatalogIterable cit = new CatalogIterable(this, this); - Iterator comps = cit.iterator(); - - List fullIds = new ArrayList<>(); - for (; comps.hasNext();) { - ComponentParam cp = comps.next(); - fullIds.add(cp.createMetaLoader().getComponentInfo().getId()); - } - assertEquals(2, fullIds.size()); - assertEquals("org.graalvm.r", fullIds.get(0)); - assertEquals("org.graalvm.ruby", fullIds.get(1)); - } - - @Test - public void testMixWildcardsAndLiterals() throws Exception { - setupCatalog(); - textParams.add("r*"); - textParams.add("ruby"); - CatalogIterable cit = new CatalogIterable(this, this); - Iterator comps = cit.iterator(); - - List fullIds = new ArrayList<>(); - for (; comps.hasNext();) { - ComponentParam cp = comps.next(); - fullIds.add(cp.createMetaLoader().getComponentInfo().getId()); - } - assertEquals(3, fullIds.size()); - assertEquals("org.graalvm.ruby", fullIds.get(1)); - assertEquals("org.graalvm.ruby", fullIds.get(2)); - } - - @Override - public FileDownloader configureDownloader(ComponentInfo ci, FileDownloader dn) { - return dn; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/ChunkedConnection.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/ChunkedConnection.java deleted file mode 100644 index 4ea9081c6e1d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/ChunkedConnection.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLConnection; -import java.util.concurrent.Semaphore; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.graalvm.component.installer.remote.FileDownloaderTest; - -public class ChunkedConnection extends HttpURLConnection { - public InputStream delegate; - public volatile long nextChunk = Long.MAX_VALUE; - public Semaphore nextSem = new Semaphore(0); - public Semaphore reachedSem = new Semaphore(0); - public URLConnection original; - public volatile IOException readException; - - public ChunkedConnection(URL url, URLConnection original) { - super(url); - this.original = original; - } - - @Override - public void connect() throws IOException { - original.connect(); - } - - @Override - public String getHeaderField(String name) { - return original.getHeaderField(name); - } - - @Override - public InputStream getInputStream() throws IOException { - connect(); - delegate = original.getInputStream(); - return new InputStream() { - @Override - public int read() throws IOException { - synchronized (ChunkedConnection.this) { - if (nextChunk == 0) { - reachedSem.release(); - try { - nextSem.acquire(); - } catch (InterruptedException ex) { - Logger.getLogger(FileDownloaderTest.class.getName()).log(Level.SEVERE, null, ex); - } - } - if (readException != null) { - throw readException; - } - nextChunk--; - return delegate.read(); - } - } - }; - } - - @Override - public long getContentLengthLong() { - return original.getContentLengthLong(); - } - - @Override - public int getContentLength() { - return original.getContentLength(); - } - - @Override - public void disconnect() { - } - - @Override - public boolean usingProxy() { - return false; - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/CommandTestBase.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/CommandTestBase.java deleted file mode 100644 index 88248b18e5f5..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/CommandTestBase.java +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.File; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.jar.JarFile; -import org.graalvm.component.installer.DownloadURLIterable.DownloadURLParam; -import org.graalvm.component.installer.commands.MockStorage; -import org.graalvm.component.installer.jar.JarMetaLoader; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.model.GraalEdition; -import org.graalvm.component.installer.os.DefaultFileOperations; -import org.graalvm.component.installer.os.WindowsFileOperations; -import org.graalvm.component.installer.persist.ComponentPackageLoader; -import org.graalvm.component.installer.remote.FileDownloader; -import org.graalvm.component.installer.persist.test.Handler; -import org.graalvm.component.installer.remote.RemoteComponentParam; -import org.graalvm.component.installer.remote.CatalogIterable.CatalogItemParam; -import org.junit.Before; -import org.junit.Rule; -import org.junit.rules.ExpectedException; -import org.junit.rules.TemporaryFolder; - -public class CommandTestBase extends TestBase implements CommandInput, SoftwareChannel, ComponentCatalog.DownloadInterceptor { - @Rule public ExpectedException exception = ExpectedException.none(); - protected JarFile componentJarFile; - @Rule public TemporaryFolder folder = new TemporaryFolder(); - - protected Path targetPath; - - protected FileOperations fileOps; - protected MockStorage storage; - protected MockStorage catalogStorage; - protected ComponentCatalog registry; - protected ComponentRegistry localRegistry; - - protected List files = new ArrayList<>(); - protected List components = new ArrayList<>(); - protected List textParams = new ArrayList<>(); - protected Map options = new HashMap<>(); - - protected Map propParameters = new HashMap<>(); - protected Map envParameters = new HashMap<>(); - - ComponentParam param; - RemoteComponentParam rparam; - URL url; - URL clu; - ComponentInfo info; - - @SuppressWarnings("this-escape") - public CommandTestBase() { - fileOps = SystemUtils.isWindows() ? new WindowsFileOperations() : new DefaultFileOperations(); - fileOps.init(this); - } - - protected void initRemoteComponent(String relativeJar, String u, String disp, String spec) throws IOException { - clu = getClass().getResource(relativeJar); - url = SystemUtils.toURL(u); - Handler.bind(url.toString(), clu); - - File f = dataFile(relativeJar).toFile(); - JarFile jf = new JarFile(f, false); - ComponentPackageLoader cpl = new JarMetaLoader(jf, this); - info = cpl.getComponentInfo(); - // unknown in catalog metadata - info.setLicensePath(null); - info.setRemoteURL(url); - param = rparam = new CatalogItemParam(this, info, disp, spec, this, false); - } - - protected void initURLComponent(String relativeJar, String spec) throws IOException { - clu = getClass().getResource(relativeJar); - url = SystemUtils.toURL(spec); - Handler.bind(url.toString(), clu); - - File f = dataFile(relativeJar).toFile(); - JarFile jf = new JarFile(f, false); - ComponentPackageLoader cpl = new JarMetaLoader(jf, this); - info = cpl.getComponentInfo(); - // unknown in catalog metadata - info.setLicensePath(null); - info.setRemoteURL(url); - param = rparam = new DownloadURLParam(url, spec, spec, this, false); - } - - protected ComponentIterable paramIterable; - - boolean verifyJars; - - @Override - public FileOperations getFileOperations() { - return fileOps; - } - - protected class CompIterableImpl implements ComponentIterable { - @Override - public void setVerifyJars(boolean verify) { - verifyJars = verify; - } - - @Override - public ComponentParam createParam(String cmdString, ComponentInfo nfo) { - return null; - } - - @Override - public Iterator iterator() { - return new Iterator<>() { - private Iterator pit = components.iterator(); - private Iterator fit; - { - FileIterable ff = new FileIterable(CommandTestBase.this, CommandTestBase.this); - ff.setVerifyJars(verifyJars); - fit = ff.iterator(); - } - - @Override - public boolean hasNext() { - return fit.hasNext() || pit.hasNext(); - } - - @Override - public ComponentParam next() { - ComponentParam p = null; - - if (pit.hasNext()) { - p = pit.next(); - // discard one parameter from files: - files.remove(0); - if (p != null) { - return p; - } - } - return fit.next(); - } - - }; - } - - @Override - public ComponentIterable matchVersion(Version.Match m) { - return this; - } - - @Override - public ComponentIterable allowIncompatible() { - return this; - } - } - - protected ComponentIterable iterableInstance; - - protected ComponentIterable createComponentIterable() { - if (iterableInstance != null) { - return iterableInstance; - } - return new CompIterableImpl(); - } - - @Override - public ComponentIterable existingFiles() throws FailedOperationException { - if (paramIterable != null) { - return paramIterable; - } - return createComponentIterable(); - } - - @Override - public String requiredParameter() throws FailedOperationException { - if (!textParams.isEmpty()) { - return textParams.remove(0); - } - return files.remove(0).toString(); - } - - @Override - public String nextParameter() { - if (hasParameter()) { - return requiredParameter(); - } - return null; - } - - @Override - public String peekParameter() { - if (!textParams.isEmpty()) { - return textParams.get(0); - } - return files.isEmpty() ? null : files.get(0).toString(); - } - - @Override - public boolean hasParameter() { - return (!textParams.isEmpty() || !files.isEmpty()); - } - - @Override - public Path getGraalHomePath() { - return targetPath; - } - - @Override - public ComponentCatalog getRegistry() { - if (registry == null) { - registry = getCatalogFactory().createComponentCatalog(this); - } - return registry; - } - - @Override - public ComponentRegistry getLocalRegistry() { - if (localRegistry == null) { - localRegistry = new ComponentRegistry(this, storage); - } - return localRegistry; - } - - @Override - public String optValue(String option) { - return options.get(option); - } - - @Before - public void setUp() throws Exception { - targetPath = folder.newFolder("inst").toPath(); - storage = new MockStorage(); - catalogStorage = new MockStorage(); - fileOps.setRootPath(targetPath); - } - - @Override - public FileDownloader processDownloader(ComponentInfo ci, FileDownloader dn) { - return dn; - } - - @Override - public FileDownloader configureDownloader(ComponentInfo ci, FileDownloader dn) { - return dn; - } - - @Override - public ComponentStorage getStorage() { - return catalogStorage; - } - - @Override - public CatalogFactory getCatalogFactory() { - return new CatalogFactory() { - @Override - public ComponentCatalog createComponentCatalog(CommandInput input) { - if (registry != null) { - return registry; - } else { - return new CatalogContents(CommandTestBase.this, catalogStorage, getLocalRegistry()); - } - } - - @Override - public List listEditions(ComponentRegistry targetGraalVM) { - return Collections.emptyList(); - } - }; - } - - @Override - public String getParameter(String key, boolean cmdLine) { - return (cmdLine ? propParameters : envParameters).get(key); - } - - @Override - public Map parameters(boolean cmdLine) { - return (cmdLine ? propParameters : envParameters); - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/ComponentInstallerTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/ComponentInstallerTest.java deleted file mode 100644 index a404da75fa2d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/ComponentInstallerTest.java +++ /dev/null @@ -1,581 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.File; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.net.URL; -import java.net.URLClassLoader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.security.CodeSource; -import java.security.ProtectionDomain; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.ResourceBundle; -import java.util.Set; -import java.util.stream.Collectors; -import org.junit.Assert; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Assume; -import org.junit.Test; -import java.net.MalformedURLException; -import java.util.stream.Stream; - -/** - * - * @author sdedic - */ -public class ComponentInstallerTest extends CommandTestBase { - StringBuilder message = new StringBuilder(); - boolean cmdReported; - String currentCmd; - - void startCommand(String cmd) { - cmdReported = false; - currentCmd = cmd; - } - - void reportOption(String k) { - if (k.length() == 1 && !Character.isLetterOrDigit(k.charAt(0))) { - return; - } - if (message.length() > 0) { - message.append(", "); - } - if (!cmdReported) { - cmdReported = true; - message.append("Command ").append(currentCmd).append(": "); - } - message.append(k); - } - - /** - * Checks that no command defines an option that clash with the global one. - */ - @Test - public void testOptionClashBetweenCommandAndGlobal() throws Exception { - ComponentInstaller.initCommands(); - for (String cmd : ComponentInstaller.commands.keySet()) { - startCommand(cmd); - InstallerCommand c = ComponentInstaller.commands.get(cmd); - Map opts = c.supportedOptions(); - for (String k : opts.keySet()) { - String v = opts.get(k); - if ("X".equals(v)) { - continue; - } - if (ComponentInstaller.globalOptions.containsKey(k) && - !ComponentInstaller.componentOptions.containsKey(k)) { - reportOption(k); - } - } - } - if (message.length() > 0) { - Assert.fail("Command options clashes with the global: " + message.toString()); - } - } - - /** - * Checks that main/common options are all printed and are consistent. - */ - @Test - public void testMainOptionsConsistent() { - ComponentInstaller.initCommands(); - discoverOptions(); - startCommand("Global"); - String help = ResourceBundle.getBundle( - "org.graalvm.component.installer.Bundle").getString("INFO_Usage"); - List lines = new ArrayList<>(Arrays.asList(help.split("\n"))); - while (!lines.get(0).startsWith("Common options:")) { - lines.remove(0); - } - lines.remove(0); - int index = 0; - while (index < lines.size()) { - String tl = lines.get(index).trim(); - if (tl.isEmpty()) { - break; - } - index++; - } - lines = lines.subList(0, index); - Map globs = new HashMap<>(ComponentInstaller.globalOptions); - checkOptions(lines, globs); - assertTrue("Help inconsistencies found: \n " + String.join("\n", errors), errors.isEmpty()); - } - - /** - * Checks that the main help reports all commands and all their options. - */ - @Test - public void testMainHelpConsistent() { - ComponentInstaller.initCommands(); - discoverOptions(); - startCommand("Global"); - String help = ResourceBundle.getBundle( - "org.graalvm.component.installer.Bundle").getString("INFO_Usage"); - String[] lines = help.split("\n"); - Map allCmds = new HashMap<>(ComponentInstaller.commands); - for (String l : lines) { - if (!l.startsWith("\tgu ")) { - continue; - } - int oS = l.indexOf('['); - int oE = l.indexOf(']'); - int sp = l.indexOf(' ', 4); - String cn = l.substring(4, sp); - if (cn.startsWith("<")) { - continue; - } - InstallerCommand c = allCmds.remove(cn); - if (c == null) { - Assert.fail("Unknown command: " + cn); - } - startCommand(cn); - if (oS == -1 || oE == -1) { - continue; - } - Map cmdOptions = new HashMap<>(c.supportedOptions()); - String optString = l.substring(oS + 1, oE); - if (optString.startsWith("-")) { - optString = optString.substring(1); - } else { - optString = ""; - } - for (int a = 0; a < optString.length(); a++) { - char o = optString.charAt(a); - String s = String.valueOf(o); - if (cmdOptions.remove(s) == null) { - if (!ComponentInstaller.globalOptions.containsKey(s)) { - reportOption(s); - } - } - } - if (message.length() > 0) { - Assert.fail("Options do not exist: " + message.toString()); - } - for (String s : new ArrayList<>(cmdOptions.keySet())) { - if (s.length() > 1 || "X".equals(cmdOptions.get(s)) || deprecatedOptions.contains(s)) { - cmdOptions.remove(s); - } - } - for (String s : cmdOptions.keySet()) { - reportOption(s); - } - if (message.length() > 0) { - Assert.fail("Options not documented: " + message.toString()); - } - } - // filter out "system" commands - for (Iterator it = allCmds.keySet().iterator(); it.hasNext();) { - String cmd = it.next(); - if (cmd.startsWith("#")) { - it.remove(); - } - } - // exclusion: update is not mentioned on main page: - allCmds.remove("update"); - if (!allCmds.isEmpty()) { - Assert.fail("Not all commands documented: " + allCmds); - } - } - - List helpLines = new ArrayList<>(); - Set deprecatedOptions = new HashSet<>(); - Set allOptions = new HashSet<>(); - - private void discoverOptions() { - try { - Field[] flds = Commands.class.getFields(); - for (Field f : flds) { - if (f.getType() != String.class) { - continue; - } - if (!(f.getName().startsWith("OPTION_") || f.getName().startsWith("LONG_OPTION_"))) { - continue; - } - String v = (String) f.get(null); - allOptions.add(v); - if (f.getAnnotation(Deprecated.class) != null) { - deprecatedOptions.add(v); - } - } - } catch (ReflectiveOperationException ex) { - - } - } - - List errors = new ArrayList<>(); - - private Set checkOptions(List optionLines, Map cmdOpts) { - Set coveredOptions = new HashSet<>(); - for (int i = 0; i < optionLines.size(); i++) { - String l = optionLines.get(i).trim(); - if (l.startsWith("-")) { - String[] spl = l.split(",?\\p{Blank}"); - String shOpt = spl[0].trim().substring(1); - if (shOpt.startsWith("-")) { - shOpt = spl[0].trim(); - } else { - if (shOpt.length() != 1) { - errors.add("Command " + currentCmd + ": Invalid short option: " + shOpt); - } else { - coveredOptions.add(shOpt); - } - String def = cmdOpts.get(shOpt); - if (def == null) { - def = ComponentInstaller.globalOptions.get(shOpt); - } - if (def == null) { - errors.add("Command " + currentCmd + ": Unsupported option: " + shOpt); - } else if (deprecatedOptions.contains(shOpt) || def.startsWith("=")) { - errors.add("Command " + currentCmd + ": Deperecated option: " + shOpt); - continue; - } - - if (spl.length == 1) { - errors.add("Command " + currentCmd + ": No explanation for: " + shOpt); - continue; - } - shOpt = spl[1].trim(); - } - if (shOpt.startsWith("--")) { - if (spl.length == 2) { - errors.add("Command " + currentCmd + ": No explanation for: " + shOpt); - continue; - } - String longOption = shOpt.substring(2); - if (longOption.length() < 2) { - errors.add("Command " + currentCmd + ": Long option too short: " + longOption); - } else { - coveredOptions.add(longOption); - } - String shopt = cmdOpts.get(longOption); - if (shopt == null) { - shopt = ComponentInstaller.globalOptions.get(longOption); - } - if (shopt == null) { - errors.add("Command " + currentCmd + ": Long option not found: " + longOption); - } else if (!(cmdOpts.containsKey(shopt) || ComponentInstaller.globalOptions.containsKey(shopt))) { - errors.add("Command " + currentCmd + ": Long option mapped to bad char: " + longOption); - } else if (Character.isLetterOrDigit(shopt.charAt(0))) { - if (!l.startsWith("-" + shopt)) { - errors.add("Command " + currentCmd + ": Long option with bad short option: " + longOption); - } - } - } - } - } - List a = new ArrayList<>(cmdOpts.keySet()); - Collections.sort(a, Collections.reverseOrder()); - - for (String s : a) { - String r = cmdOpts.get(s); - if (s.length() > 1) { - r = cmdOpts.get(r); - } - if ("X".equals(r)) { - cmdOpts.remove(s); - } - } - cmdOpts.keySet().removeAll(coveredOptions); - cmdOpts.keySet().removeAll(deprecatedOptions); - for (String s : new ArrayList<>(cmdOpts.keySet())) { - if (!Character.isLetterOrDigit(s.charAt(0))) { - cmdOpts.remove(s); - } - } - if (!cmdOpts.isEmpty()) { - errors.add("Command " + currentCmd + ": Option(s) missing in option list - " + cmdOpts.keySet()); - } - return coveredOptions; - } - - private void checkCommandAndOptionsList(InstallerCommand cmd) { - boolean overviewFound = false; - String prefix = "gu " + currentCmd + " "; - List optionLines = new ArrayList<>(); - boolean optionBlockStarted = false; - Set optionsInOverview = new HashSet<>(); - - Map cmdOpts = new HashMap<>(cmd.supportedOptions()); - cmdOpts.remove(Commands.DO_NOT_PROCESS_OPTIONS); - - Map opts = new HashMap<>(cmdOpts); - for (String l : helpLines) { - if (l.startsWith(prefix)) { - if (overviewFound) { - errors.add("Command " + currentCmd + ": Duplicate overviews not permitted"); - } - int optsStart = l.indexOf('['); - int optsEnd = l.indexOf(']'); - - if (optsStart == -1) { - if (!opts.isEmpty()) { - errors.add("Command " + currentCmd + ": Options block missing"); - } - continue; - } - if (optsEnd <= optsStart + 1) { - errors.add("Command " + currentCmd + ": Options block malformed"); - } - - String optList = l.substring(optsStart + 1, optsEnd); - if (optList.startsWith("-")) { - optList = optList.substring(1); - } - - for (int i = 0; i < optList.length(); i++) { - String o = optList.substring(i, i + 1); - - if ("X".equals(opts.get(o))) { - errors.add("Command " + currentCmd + ": Disabled option listed - " + o); - } - - if (!(opts.containsKey(o) || ComponentInstaller.globalOptions.containsKey(o))) { - errors.add("Command " + currentCmd + ": Unsupported option listed - " + o); - } - opts.remove(o); - optionsInOverview.add(o); - } - - List oneChars = opts.keySet().stream().filter((s) -> s.length() == 1 // one-liner - && !"X".equals(opts.get(s)) // not disabled - && (s.length() > 1 || Character.isLetterOrDigit(s.charAt(0))) && !deprecatedOptions.contains(s) // not - // deprecated - ).sorted().collect(Collectors.toList()); - if (!oneChars.isEmpty()) { - errors.add("Command " + currentCmd + ": Option(s) missing in command overview - " + oneChars); - } - overviewFound = true; - } - - if (l.toLowerCase().endsWith("options:")) { - optionBlockStarted = true; - } - if (optionBlockStarted) { - if (l.trim().startsWith("-")) { - optionLines.add(l.substring(l.indexOf('-'))); - } - } - } - if (!overviewFound) { - errors.add("Command " + currentCmd + ": Overview line not found"); - } - checkOptions(optionLines, cmdOpts); - } - - @Test - public void testCommandHelpConsistent() throws Exception { - discoverOptions(); - - ComponentInstaller.initCommands(); - Map allCmds = new HashMap<>(ComponentInstaller.commands); - - delegateFeedback(new FeedbackAdapter() { - @Override - public void output(String bundleKey, Object... params) { - super.output(bundleKey, params); - helpLines.addAll(Arrays.asList(reallyl10n(bundleKey, params).split("\n"))); - } - - @Override - public void message(String bundleKey, Object... params) { - output(bundleKey, params); - } - - }); - options.put(Commands.OPTION_HELP, ""); - for (String cmd : allCmds.keySet()) { - if (cmd.startsWith("#")) { - continue; - } - // exception: rebuild-images delegates help to others: - if ("rebuild-images".equals(cmd)) { - continue; - } - - InstallerCommand cc = allCmds.get(cmd); - helpLines.clear(); - cc.init(this, this.withBundle(cc.getClass())); - startCommand(cmd); - cc.execute(); - checkCommandAndOptionsList(cc); - } - assertTrue("Help inconsistencies found: \n " + String.join("\n", errors), errors.isEmpty()); - } - - private InstallerExecHelper helper = new InstallerExecHelper(); - - @Test - public void testFindGraalVMHome() throws Exception { - System.getProperties().remove(CommonConstants.ENV_GRAALVM_HOME_DEV); - - ComponentInstaller installer = new ComponentInstaller(new String[]{}); - - Path relComps = Paths.get("lib/installer/components"); - Path graal = targetPath.resolve("ggg"); - Path invalidBase = targetPath.resolve("invalid"); - Files.createDirectories(graal.resolve(relComps)); - Files.write(graal.resolve("release"), Arrays.asList("Hello, GraalVM!")); - - Environment env = helper.createFakedEnv(); - installer.setInput(env); - - Path result; - helper.fakeEnv.put(CommonConstants.ENV_GRAALVM_HOME_DEV, graal.toString()); - try { - result = installer.findGraalHome(); - fail("Should fail, invalid way to provide home."); - } catch (FailedOperationException ex) { - // expected - } - - System.setProperty(CommonConstants.ENV_GRAALVM_HOME_DEV, invalidBase.toString()); - try { - result = installer.findGraalHome(); - fail("Should fail, invalid home provided."); - } catch (FailedOperationException ex) { - // expected - } - - System.setProperty(CommonConstants.ENV_GRAALVM_HOME_DEV, graal.toString()); - result = installer.findGraalHome(); - assertTrue(Files.isSameFile(graal, result)); - } - - @Test - public void testAutoFindGraalVMHome() throws Exception { - System.getProperties().remove(CommonConstants.ENV_GRAALVM_HOME_DEV); - - // Undefine all, and use last resort: copy the JAR - URL locInstaller = getClassLocation(ComponentInstaller.class); - URL locTest = getClassLocation(ComponentInstallerTest.class); - - Assume.assumeFalse("Skipped because runs from classes", locInstaller == null || locTest == null); - - Path origInstaller = new File(locInstaller.toURI()).toPath(); - Path origTest = new File(locTest.toURI()).toPath(); - - Assume.assumeTrue("Skipped because runs from classes", - origInstaller != null && origTest != null && - Files.isRegularFile(origInstaller) && Files.isRegularFile(origTest)); - - Path relComps = Paths.get("lib/installer/components"); - Path graal = targetPath.resolve("ggg"); - Path instDir = graal.resolve("lib/installer"); - Files.createDirectories(graal.resolve(relComps)); - Files.write(graal.resolve("release"), Arrays.asList("Hello, GraalVM!")); - - // copy over the JARs: - Path targetInstaller = instDir.resolve(origInstaller.getFileName()); - Path targetTest = instDir.resolve(origTest.getFileName()); - Files.copy(origInstaller, targetInstaller); - Files.copy(origTest, targetTest); - - List urls = new ArrayList<>(); - - urls.add(targetInstaller.toUri().toURL()); - urls.add(targetTest.toUri().toURL()); - - Stream urlStream; - if (getClass().getClassLoader() instanceof URLClassLoader) { - URLClassLoader myLoader = (URLClassLoader) getClass().getClassLoader(); - urlStream = Arrays.stream(myLoader.getURLs()); - } else { - urlStream = Arrays.stream(System.getProperty("java.class.path").split(System.getProperty("path.separator"))).map(e -> { - try { - return Paths.get(e).toUri().toURL(); - } catch (MalformedURLException ex) { - } - return null; - }).filter(u -> u != null); - } - urlStream.filter(u -> !(locInstaller.equals(u) || locTest.equals(u))).collect(Collectors.toCollection(() -> urls)); - - URLClassLoader ldr = new URLClassLoader( - urls.toArray(new URL[urls.size()]), - getClass().getClassLoader().getParent()); - - Class testClazz = Class.forName(InstallerExecHelper.class.getName(), true, ldr); - - Object inst = testClazz.getDeclaredConstructor().newInstance(); - Method m = testClazz.getMethod("performGraalVMHomeAutodetection"); - String res = (String) m.invoke(inst); - - assertEquals(graal.toString(), res); - } - - public static class InstallerExecHelper { - Map fakeEnv = new HashMap<>(System.getenv()); - - private Environment createFakedEnv() { - Environment env = new Environment("", Collections.emptyList(), Collections.emptyMap()) { - @Override - public String getParameter(String key, boolean cmdLine) { - if (cmdLine) { - return super.getParameter(key, cmdLine); - } else { - return fakeEnv.get(key); - } - } - - }; - return env; - } - - public String performGraalVMHomeAutodetection() { - ComponentInstaller installer = new ComponentInstaller(new String[]{}); - fakeEnv.clear(); - Environment env = createFakedEnv(); - installer.setInput(env); - - installer.findGraalHome(); - return installer.getGraalHomePath().toString(); - } - } - - private static URL getClassLocation(Class clazz) { - ProtectionDomain pd = clazz.getProtectionDomain(); - if (pd != null) { - CodeSource cs = pd.getCodeSource(); - if (cs != null) { - return cs.getLocation(); - } - } - return null; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/DirectoryArchiveReader.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/DirectoryArchiveReader.java deleted file mode 100644 index fce07a683cf9..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/DirectoryArchiveReader.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import org.graalvm.component.installer.persist.DirectoryMetaLoader; -import org.graalvm.component.installer.persist.MetadataLoader; - -/** - * - * @author sdedic - */ -public class DirectoryArchiveReader implements ComponentArchiveReader { - @Override - public MetadataLoader createLoader(Path p, byte[] fileStart, String serial, Feedback feedback, boolean verify) throws IOException { - if (!Files.isDirectory(p)) { - return null; - } - if (Files.isReadable(p.resolve("META-INF/MANIFEST.MF"))) { - return DirectoryMetaLoader.create(p, feedback); - } else { - return null; - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/DownloadURLIterableTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/DownloadURLIterableTest.java deleted file mode 100644 index 2a5ccd2ef3c0..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/DownloadURLIterableTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.util.Iterator; -import org.graalvm.component.installer.jar.JarArchive; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.persist.test.Handler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import org.junit.Rule; -import org.junit.Test; - -public class DownloadURLIterableTest extends CommandTestBase { - @Rule public final ProxyResource proxyResource = new ProxyResource(); - - @Test - public void testConstructComponentParam() throws Exception { - initURLComponent("persist/data/truffleruby2.jar", "test://graalvm.io/download/truffleruby.zip"); - assertEquals("test://graalvm.io/download/truffleruby.zip", param.getSpecification()); - assertEquals("test://graalvm.io/download/truffleruby.zip", param.getDisplayName()); - assertFalse(param.isComplete()); - assertFalse(Handler.isVisited(url)); - } - - @Test - public void testURLParameter() throws Exception { - initURLComponent("persist/data/truffleruby3.jar", "test://graalvm.io/download/truffleruby.zip"); - this.textParams.add("test://graalvm.io/download/truffleruby.zip"); - - DownloadURLIterable iterable = new DownloadURLIterable(this, this); - Iterator it = iterable.iterator(); - assertTrue(it.hasNext()); - - ComponentParam p = it.next(); - - assertEquals("test://graalvm.io/download/truffleruby.zip", p.getSpecification()); - MetadataLoader ldr = p.createMetaLoader(); - assertFalse(p.isComplete()); - - ComponentInfo ci = ldr.getComponentInfo(); - assertTrue(p.isComplete()); - - assertEquals("ruby", ci.getId()); - assertEquals("0.33-dev", ci.getVersionString()); - - JarArchive jf = (JarArchive) ldr.getArchive(); - Archive.FileEntry je = jf.getJarEntry("META-INF/MANIFEST.MF"); - assertNotNull(je); - jf.close(); - } - - @Test - public void testMalformedURL() throws Exception { - this.textParams.add("testx://graalvm.io/download/truffleruby.zip"); - - DownloadURLIterable iterable = new DownloadURLIterable(this, this); - Iterator it = iterable.iterator(); - assertTrue(it.hasNext()); - - exception.expect(FailedOperationException.class); - exception.expectMessage("URL_InvalidDownloadURL"); - - it.next(); - } - - @Test - public void testInstallFromURL() throws Exception { - initURLComponent("persist/data/truffleruby2.jar", "test://graalvm.io/download/truffleruby.zip"); - - components.add(rparam); - - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/EnvironmentTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/EnvironmentTest.java deleted file mode 100644 index 852086122137..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/EnvironmentTest.java +++ /dev/null @@ -1,241 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.BufferedReader; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.FilterInputStream; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.PrintStream; -import java.net.MalformedURLException; -import java.text.MessageFormat; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.ResourceBundle; -import java.util.stream.Collectors; -import org.junit.AfterClass; -import org.junit.Assert; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotSame; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -/** - * Tests basic functionality of the Environment class. - * - * @author sdedic - */ -public class EnvironmentTest { - @Rule public ExpectedException exception = ExpectedException.none(); - - private static ResourceBundle B1; - private static Locale saveLocale; - private Environment env; - - private Map initOptions = new HashMap<>(); - - @BeforeClass - public static void setUp() { - // establish well-known locale, so we may check I18ned strings - saveLocale = Locale.getDefault(); - Locale.setDefault(Locale.US); - B1 = ResourceBundle.getBundle("org.graalvm.component.installer.Bundle", Locale.US); - } - - @AfterClass - public static void tearDown() { - Locale.setDefault(saveLocale); - } - - class FailInputStream extends FilterInputStream { - FailInputStream() { - super(System.in); - } - - @Override - public int read() throws IOException { - Assert.fail("Unexpected read"); - return super.read(); - } - - @Override - public int read(byte[] b, int off, int len) throws IOException { - Assert.fail("Unexpected read"); - return super.read(b, off, len); - } - } - - ByteArrayOutputStream outBuffer = new ByteArrayOutputStream(); - ByteArrayOutputStream errBuffer = new ByteArrayOutputStream(); - - @Test - public void testNonInteractiveLineFails() { - setupEmptyEnv(); - env.setNonInteractive(true); - env.setIn(new FailInputStream()); - exception.expect(NonInteractiveException.class); - assertNull(env.acceptLine(false)); - } - - /** - * Non-interactive mode + auto-yes, and confirmation line. Should succeed. - */ - @Test - public void testNonInteractiveYesLineOK() { - setupEmptyEnv(); - env.setNonInteractive(true); - env.setAutoYesEnabled(true); - env.setIn(new FailInputStream()); - assertSame(Feedback.AUTO_YES, env.acceptLine(true)); - } - - /** - * Non-interactive mode + auto-yes, but regular, not a confirmation line. Should fail. - */ - @Test - public void testNonInteractiveNormalLineFails() { - setupEmptyEnv(); - env.setNonInteractive(true); - env.setAutoYesEnabled(true); - env.setIn(new FailInputStream()); - exception.expect(NonInteractiveException.class); - exception.expectMessage(B1.getString("ERROR_NoninteractiveInput")); - assertSame(Feedback.AUTO_YES, env.acceptLine(false)); - } - - /** - * Regular + auto-yes. Confirmation line should not read the input. - */ - @Test - public void testAutoConfirmSkipsInput() { - setupEmptyEnv(); - env.setAutoYesEnabled(true); - env.setIn(new FailInputStream()); - assertSame(Feedback.AUTO_YES, env.acceptLine(true)); - } - - @Test - public void testNonInteractivePasswordFails() { - setupEmptyEnv(); - env.setNonInteractive(true); - env.setIn(new FailInputStream()); - exception.expect(NonInteractiveException.class); - assertNull(env.acceptPassword()); - } - - void setupEmptyEnv() { - List parameters = Arrays.asList("param"); - env = new Environment("test", "org.graalvm.component.installer", parameters, initOptions); - } - - private static String readLines(byte[] arr) throws IOException { - try (BufferedReader bfr = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(arr)))) { - return bfr.lines().map(l -> l + "\n").collect(Collectors.joining()); - } - } - - /** - * Checks that an error will be printed without stacktrace. - */ - @Test - public void testErrorMessagePlain() throws Exception { - setupEmptyEnv(); - env.setErr(new PrintStream(errBuffer)); - env.error("ERROR_UserInput", new ClassCastException(), "Foobar"); - // Windows compat: CRLF -> LF conversion - String s = readLines(errBuffer.toByteArray()); - assertEquals(B1.getString("ERROR_UserInput").replace("{0}", "Foobar") + "\n", s); - } - - /** - * Checks that an error will be printed together with the stacktrace. - */ - @Test - public void testErrorMessageWithException() throws Exception { - initOptions.put(Commands.OPTION_DEBUG, ""); - setupEmptyEnv(); - env.setErr(new PrintStream(errBuffer)); - env.error("ERROR_UserInput", new ClassCastException(), "Foobar"); - // Windows compat: CRLF -> LF conversion - String all = readLines(errBuffer.toByteArray()); - String[] lines = all.split("\n"); - assertEquals(B1.getString("ERROR_UserInput").replace("{0}", "Foobar"), lines[0]); - assertTrue(lines[1].contains("ClassCastException")); - } - - @Test - public void testFailureOperation() throws Exception { - setupEmptyEnv(); - - Throwable t = env.failure("URL_InvalidDownloadURL", new MalformedURLException("Foo"), "Bar", "Baz"); - assertTrue(t instanceof FailedOperationException); - String s = MessageFormat.format(B1.getString("URL_InvalidDownloadURL"), "Bar", "Baz"); - assertEquals(t.getLocalizedMessage(), s); - assertNotSame(t, t.getCause()); - assertEquals("Foo", t.getCause().getLocalizedMessage()); - } - - @Test - public void testOutput() throws Exception { - setupEmptyEnv(); - - env.setOut(new PrintStream(outBuffer)); - env.output("ERROR_MissingCommand"); - // Windows compat: CRLF -> LF conversion - String s = readLines(outBuffer.toByteArray()); - assertEquals(B1.getString("ERROR_MissingCommand") + "\n", s); - } - - @Test - public void testSilentOutput() throws Exception { - setupEmptyEnv(); - assertFalse(env.setSilent(true)); - - // output error even when silent - env.setErr(new PrintStream(errBuffer)); - env.error("ERROR_UserInput", new ClassCastException(), "Foobar"); - // Windows compat: CRLF -> LF conversion - String s = readLines(errBuffer.toByteArray()); - assertEquals(B1.getString("ERROR_UserInput").replace("{0}", "Foobar") + "\n", s); - - // don't output normal output when silent - env.setOut(new PrintStream(outBuffer)); - env.output("ERROR_MissingCommand"); - // Windows compat: CRLF -> LF conversion - s = readLines(outBuffer.toByteArray()); - assertEquals("", s); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/InstallerCommandlineTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/InstallerCommandlineTest.java deleted file mode 100644 index 7b25301cdf8c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/InstallerCommandlineTest.java +++ /dev/null @@ -1,739 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.net.URL; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.persist.test.Handler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class InstallerCommandlineTest extends CommandTestBase { - - static class MainErrorException extends RuntimeException { - private static final long serialVersionUID = 0L; - } - - private Environment environment; - - class MockInstallerMain extends ComponentInstaller { - MockInstallerMain(String[] args) { - super(args); - initGlobalOptions(); - } - - @Override - protected Environment setupEnvironment(SimpleGetopt go) { - - Environment env = new Environment(getCommand(), getParameters(), go.getOptValues()) { - @Override - public Map parameters(boolean cmdLine) { - return InstallerCommandlineTest.this.parameters(cmdLine); - } - - @Override - public String getParameter(String key, boolean cmdLine) { - return InstallerCommandlineTest.this.getParameter(key, cmdLine); - } - - }; - - setInput(env); - setFeedback(InstallerCommandlineTest.this); - env.setGraalHome(exposeGraalHomePath()); - env.setLocalRegistry(getLocalRegistry()); - env.setFileOperations(getFileOperations()); - environment = env; - return env; - } - - @Override - protected RuntimeException error(String messageKey, Object... aa) { - InstallerCommandlineTest.this.error(messageKey, null, aa); - throw new MainErrorException(); - } - - @Override - protected SimpleGetopt createOptionsObject(Map opts) { - return new SimpleGetopt(globalOptions) { - @Override - public RuntimeException err(String messageKey, Object... aa) { - return MockInstallerMain.this.error(messageKey, aa); - } - }; - } - - @Override - protected void printUsage(Feedback output) { - super.printUsage(InstallerCommandlineTest.this); - } - } - - Path exposeGraalHomePath() { - return getGraalHomePath(); - } - - MockInstallerMain main = new MockInstallerMain(new String[0]); - - static class Msg { - String keyOrMessage; - Object[] args; - Throwable ex; - - Msg(String keyOrMessage, Object[] args, Throwable ex) { - this.keyOrMessage = keyOrMessage; - this.args = args; - this.ex = ex; - } - } - - class CaptureOut extends FeedbackAdapter { - private List err = new ArrayList<>(); - private List out = new ArrayList<>(); - - @Override - public void error(String key, Throwable t, Object... params) { - err.add(new Msg(key, params, t)); - } - - @Override - public void output(String bundleKey, Object... params) { - out.add(new Msg(bundleKey, params, null)); - } - - @Override - public void message(String bundleKey, Object... params) { - out.add(new Msg(bundleKey, params, null)); - } - - @Override - public boolean verbatimOut(String msg, boolean beVerbose) { - System.err.println(""); - return false; - } - - @Override - public String l10n(String key, Object... params) { - if ("Installer_BuiltingCatalogURL".equals(key)) { - return testCatalogURL; - } - return super.l10n(key, params); - } - } - - String testCatalogURL = "test://www.graalvm.org/test/catalog"; - CaptureOut capture = new CaptureOut(); - LinkedList args = new LinkedList<>(); - - void assertMsg(String msgKey, boolean out) { - List list = out ? capture.out : capture.err; - for (Msg m : list) { - if (msgKey.equals(m.keyOrMessage)) { - return; - } - } - fail("Expected message: " + msgKey); - } - - @Before - @Override - public void setUp() throws Exception { - super.setUp(); - ComponentInstaller.initCommands(); - ComponentInstaller.initGlobalOptions(); - delegateFeedback(capture); - } - - /** - * Checks that help is printed with no params. - */ - @Test - public void testNoParamsPrintsHelp() { - main.processOptions(new LinkedList<>(Collections.emptyList())); - assertMsg("INFO_Usage", true); - } - - /** - * Checks that help is printed with no params. - */ - @Test - public void testNoCommandPrintsError() { - args = new LinkedList<>(); - args.add("--file"); - exception.expect(MainErrorException.class); - - try { - main.processOptions(args); - } finally { - assertMsg("ERROR_MissingCommand", false); - } - } - - /** - * Checks that --version option prints version and terminates with 0 exit code. - */ - @Test - public void testVersionSucceeds() { - args = new LinkedList<>(); - args.add("--version"); - - delegateFeedback(capture); - int excode = main.processOptions(args); - assertTrue(capture.err.isEmpty()); - assertMsg("MSG_InstallerVersion", true); - assertEquals("Must complete succesfully", 0, excode); - } - - /** - * Checks that --show-version option prints version and performs the command. - */ - @Test - public void testShowVersionSucceeds() { - args = new LinkedList<>(); - args.add("--show-version"); - args.add("list"); - - delegateFeedback(capture); - int excode = main.processOptions(args); - assertTrue(capture.err.isEmpty()); - assertMsg("MSG_InstallerVersion", true); - assertEquals("Should continue execution", -1, excode); - } - - /** - * Checks that help is printed with no params. - */ - @Test - public void testHelpOption() { - args = new LinkedList<>(); - args.add("--help"); - assertNull(main.interpretOptions(main.createOptions(args))); - assertMsg("INFO_Usage", true); - - main = new MockInstallerMain(new String[0]); - capture.out.clear(); - args.add(0, "install"); - assertNotNull(main.createOptions(args)); - } - - /** - * Checks that -L -U is not valid. - */ - @Test - public void testUrlAndFiles() throws Exception { - exception.expect(MainErrorException.class); - - args.add("--url"); - args.add("--file"); - main.processOptions(args); - } - - /** - * Checks that -c -U is not valid. - */ - @Test - public void testUrlAndCatalog() throws Exception { - exception.expect(MainErrorException.class); - - args.add("--url"); - args.add("-c"); - main.processOptions(args); - } - - /** - * Checks that -c -U is not valid. - */ - @Test - public void testUrlAndCustomCatalog() throws Exception { - exception.expect(MainErrorException.class); - - args.add("--url"); - args.add("-C"); - args.add("eee"); - main.processOptions(args); - } - - @Rule public ProxyResource proxyResource = new ProxyResource(); - - @Override - public CatalogFactory getCatalogFactory() { - return environment.getCatalogFactory(); - } - - /** - * Checks that the hardcoded catalog is used, if there's nothing in release file. - */ - @Test - public void testUseHardcodedCatalog() throws Exception { - URL u = getClass().getResource("remote/catalog"); - Handler.bind(testCatalogURL, u); - this.storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "0.33-dev"); - args.add("avail"); - - main.processOptions(args); - main.doProcessCommand(); - assertTrue(Handler.isVisited(testCatalogURL)); - } - - String releaseURL = "test://graalvm.org/relase/catalog"; - - void setupReleaseCatalog() { - this.storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "0.33-dev"); - this.storage.graalInfo.put("component_catalog", releaseURL); - } - - /** - * Checks that the hardcoded catalog is used, if there's nothing in release file. - */ - @Test - public void testUseReleaseCatalog() throws Exception { - setupReleaseCatalog(); - URL u = getClass().getResource("remote/catalog"); - Handler.bind(releaseURL, u); - args.add("avail"); - - main.processOptions(args); - main.doProcessCommand(); - assertTrue(Handler.isVisited(releaseURL)); - } - - String envURL = "test://graalvm.org/environment/catalog"; - - void setupEnvCatalog() { - envParameters.put("GRAALVM_CATALOG", envURL); - } - - /** - * Checks that the hardcoded catalog is used, if there's nothing in release file. - */ - @Test - public void testEnvironmentOverridesRelease() throws Exception { - URL u = getClass().getResource("remote/catalog"); - Handler.bind(envURL, u); - setupReleaseCatalog(); - setupEnvCatalog(); - args.add("avail"); - - main.processOptions(args); - main.doProcessCommand(); - assertTrue(Handler.isVisited(envURL)); - } - - String syspropURL = "test://graalvm.org/sysprop/catalog"; - - void setupSyspropCatalog() { - propParameters.put("org.graalvm.component.catalog", syspropURL); - } - - /** - * Checks that the hardcoded catalog is used, if there's nothing in release file. - */ - @Test - public void testSysPropertyOverridesEnv() throws Exception { - URL u = getClass().getResource("remote/catalog"); - Handler.bind(syspropURL, u); - setupReleaseCatalog(); - setupEnvCatalog(); - setupSyspropCatalog(); - args.add("avail"); - - main.processOptions(args); - assertEquals(0, main.doProcessCommand()); - assertTrue(Handler.isVisited(syspropURL)); - } - - /** - * Checks that without an explicit option remote catalogs are not processed when using local - * files. - */ - @Test - public void testLocalFileDoesNotReadCatalogs() throws Exception { - setupReleaseCatalog(); - Path file = dataFile("persist/dir1/llvm-toolchain.jar"); - args.add("--file"); - args.add("install"); - args.add("-0"); - args.add(file.toString()); - - main.processOptions(args); - assertEquals(0, main.doProcessCommand()); - - assertFalse(Handler.isVisited(releaseURL)); - assertFalse(Handler.isVisited(envURL)); - assertFalse(Handler.isVisited(testCatalogURL)); - } - - /** - * Checks that without an explicit option remote catalogs are not processed when using local - * files. - */ - @Test - public void testLocalFilesWithDefaultCatalog() throws Exception { - setupReleaseCatalog(); - Path file = dataFile("persist/dir1/llvm-toolchain.jar"); - args.add("--file"); - args.add("-c"); - args.add("install"); - args.add("-0"); - args.add(file.toString()); - - // allow the remote catalog: - URL u = getClass().getResource("remote/catalog"); - Handler.bind(releaseURL, u); - - main.processOptions(args); - assertEquals(0, main.doProcessCommand()); - - // no ID is resolved - assertFalse(Handler.isVisited(releaseURL)); - assertFalse(Handler.isVisited(envURL)); - assertFalse(Handler.isVisited(testCatalogURL)); - } - - /** - * Local file with dependencies fails to install if -D is not given. - */ - @Test - public void testFailLocalWithDependencies() throws Exception { - setupReleaseCatalog(); - Path file = dataFile("persist/dir1/ruby.jar"); - args.add("--file"); - args.add("install"); - args.add("-0"); - args.add(file.toString()); - - // allow the remote catalog: - URL u = getClass().getResource("remote/catalog"); - Handler.bind(releaseURL, u); - - main.processOptions(args); - - exception.expect(FailedOperationException.class); - exception.expectMessage("INSTALL_UnresolvedDependencies"); - - try { - assertEquals(0, main.doProcessCommand()); - } finally { - assertFalse(Handler.isVisited(releaseURL)); - assertFalse(Handler.isVisited(envURL)); - assertFalse(Handler.isVisited(testCatalogURL)); - } - } - - /** - * Checks that with -D, local dependencies are resolved in the file's directory. - */ - @Test - public void testLocalDepsResolvedInDirectory() throws Exception { - setupReleaseCatalog(); - Path file = dataFile("persist/dir1/ruby.jar"); - args.add("--file"); - args.add("install"); - args.add("-0"); - args.add("-D"); - args.add(file.toString()); - - // allow the remote catalog: - URL u = getClass().getResource("remote/catalog"); - Handler.bind(releaseURL, u); - - main.processOptions(args); - - assertEquals(0, main.doProcessCommand()); - assertFalse(Handler.isVisited(releaseURL)); - assertFalse(Handler.isVisited(envURL)); - assertFalse(Handler.isVisited(testCatalogURL)); - } - - /** - * Checks that -c will cause the catalog to be downloaded. - * - * @throws Exception - */ - @Test - public void testEnableCatalogFetchesRemote() throws Exception { - setupReleaseCatalog(); - args.add("-c"); - args.add("list"); - - URL u = getClass().getResource("remote/catalog"); - Handler.bind(releaseURL, u); - storage.graalInfo.put("component_catalog", releaseURL); - - main.processOptions(args); - main.doProcessCommand(); - - assertTrue(Handler.isVisited(releaseURL)); - } - - /** - * When -C local-file is passed, gu must not touch its builtin (release file) catalogs URLs. - * - * @throws Exception - */ - @Test - public void testDirectoryCatalogDisablesRelease() throws Exception { - setupReleaseCatalog(); - Path dir = dataFile("repo/19.3.0.0"); - args.add("-C"); - args.add(dir.toAbsolutePath().toString()); - args.add("avail"); - args.add("--show-updates"); - - URL u = getClass().getResource("remote/catalog"); - Handler.bind(releaseURL, u); - storage.graalInfo.put("component_catalog", releaseURL); - - Set componentShorts = new HashSet<>(); - class FB extends FeedbackAdapter { - - @Override - public String l10n(String key, Object... params) { - if ("LIST_ComponentShortList".equals(key)) { - return "%1$s"; - } - return super.l10n(key, params); - } - - @Override - public boolean verbatimOut(String msg, boolean beVerbose) { - componentShorts.add(msg); - return super.verbatimOut(msg, beVerbose); - } - } - - FB fb = new FB(); - - delegateFeedback(fb); - - main.processOptions(args); - main.doProcessCommand(); - - assertTrue(componentShorts.contains("graalvm")); - assertTrue(componentShorts.contains("R")); - assertTrue(componentShorts.contains("ruby")); - assertTrue(componentShorts.contains("llvm-toolchain")); - - assertFalse(Handler.isVisited(releaseURL)); - } - - /** - * There's a mix of component versions in the dir; should return just the ones that fit into the - * graalvm. - * - * @throws Exception - */ - @Test - public void testVersionSpecificComponentsFromDir() throws Exception { - setupReleaseCatalog(); - Path dir = dataFile("persist/data"); - args.add("-C"); - args.add(dir.toAbsolutePath().toString()); - args.add("avail"); - args.add("--show-updates"); - - URL u = getClass().getResource("remote/catalog"); - Handler.bind(releaseURL, u); - storage.graalInfo.put("component_catalog", releaseURL); - - Set componentShorts = new HashSet<>(); - class FB extends FeedbackAdapter { - - @Override - public String l10n(String key, Object... params) { - if ("LIST_ComponentShortList".equals(key)) { - return "%1$s"; - } - return super.l10n(key, params); - } - - @Override - public boolean verbatimOut(String msg, boolean beVerbose) { - componentShorts.add(msg); - return super.verbatimOut(msg, beVerbose); - } - } - - FB fb = new FB(); - - delegateFeedback(fb); - - main.processOptions(args); - main.doProcessCommand(); - - // note: there's a typo in test data. - assertTrue(componentShorts.contains("org.graavm.ruby")); - // llvm-toolchain requires graalvm 0.32, which is not compatible with 0.33 - assertTrue(componentShorts.contains("ruby")); - - assertFalse(Handler.isVisited(releaseURL)); - } - - /** - * Checks that potential missing resources in release catalog are skipped. - */ - @Test - public void testSkipMissingResourcesInReleaseCatalog() throws Exception { - setupReleaseCatalog(); - args.add("avail"); - - URL u = getClass().getResource("remote/catalog.properties"); - String urlString = releaseURL + "_2"; - Handler.bind(urlString, u); - // note: the releaseURL is NOT bound, FileNotFoundException will be thrown - storage.graalInfo.put("component_catalog", releaseURL + "|" + urlString); - - class FB extends FeedbackAdapter { - String warningLine; - - @Override - public void error(String key, Throwable t, Object... params) { - if ("REMOTE_WarningErrorDownloadCatalogNotFoundSkip".equals(key)) { - warningLine = params[0].toString(); - } - } - - } - - FB fb = new FB(); - - delegateFeedback(fb); - main.processOptions(args); - main.doProcessCommand(); - - assertTrue(Handler.isVisited(releaseURL)); - assertTrue(Handler.isVisited(urlString)); - assertEquals(releaseURL, fb.warningLine); - } - - /** - * Checks that catalog entries in environment win over release file ones. - * - * @throws Exception - */ - @Test - public void testExplicitCatalogWinsOverItems() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.1.0"); - storage.graalInfo.put("component_catalog", releaseURL); - - // override with env variables catalog entries: - String url1 = "test://graalv.org/test/explicit.properties"; - String url2 = "test://graalv.org/test/envcatalog.properties"; - envParameters.put("GRAALVM_CATALOG", url1); - envParameters.put("GRAALVM_COMPONENT_CATALOG_1_URL", url2); - envParameters.put("GRAALVM_COMPONENT_CATALOG_1_LABEL", "First env"); - - args.add("avail"); - - main.processOptions(args); - main.doProcessCommand(); - - URL u = getClass().getResource("remote/catalog"); - Handler.bind(releaseURL, u); - Handler.bind(url1, u); - Handler.bind(url2, u); - - assertFalse(Handler.isVisited(releaseURL)); - assertFalse(Handler.isVisited(url2)); - - assertTrue(Handler.isVisited(url1)); - } - - /** - * By default, the default edition must be used to determine the catalogs. - * - * @throws Exception - */ - @Test - public void testUseDefaultEditionCatalogsSingle() throws Exception { - String url0 = "test://graalvm.org/relase/catalog2"; - String url1 = "test://graalv.org/test/explicit.properties"; - String url2 = "test://graalv.org/test/envcatalog.properties"; - - releaseURL = url0 + "|{ee=GraalVM EE}" + url1; // NOI18N - storage.graalInfo.put(CommonConstants.RELEASE_CATALOG_KEY, releaseURL); - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.1.0"); - - URL u = getClass().getResource("remote/catalog"); - Handler.bind(url0, u); - Handler.bind(url1, u); - Handler.bind(url2, u); - - args.add("avail"); - - main.processOptions(args); - main.doProcessCommand(); - - assertTrue(Handler.isVisited(url0)); - assertFalse(Handler.isVisited(url1)); - assertFalse(Handler.isVisited(url2)); - } - - @Test - public void testUseExplicitEditionOnParams() throws Exception { - String url0 = "test://graalvm.org/relase/catalog2"; - String url1 = "test://graalv.org/test/explicit.properties"; - String url2 = "test://graalv.org/test/envcatalog.properties"; - - releaseURL = url0 + "|{ee=GraalVM EE}" + url1; // NOI18N - storage.graalInfo.put(CommonConstants.RELEASE_CATALOG_KEY, releaseURL); - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.1.0"); - - URL u = getClass().getResource("remote/catalog"); - Handler.bind(url0, u); - Handler.bind(url1, u); - Handler.bind(url2, u); - - args.add("avail"); - args.add("--edition"); - args.add("ee"); - - main.processOptions(args); - main.doProcessCommand(); - - assertFalse(Handler.isVisited(url0)); - assertTrue(Handler.isVisited(url1)); - assertFalse(Handler.isVisited(url2)); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/MemoryFeedback.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/MemoryFeedback.java deleted file mode 100644 index dd0d5d4037c3..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/MemoryFeedback.java +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import static org.junit.Assert.assertEquals; -import java.net.URL; -import java.nio.file.Path; -import java.util.ArrayDeque; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Queue; -import java.util.function.Function; -import java.util.function.Supplier; -import java.util.stream.Collectors; -import org.graalvm.component.installer.MemoryFeedback.Memory; - -/** - * - * @author odouda - */ -public final class MemoryFeedback implements Feedback, Iterable { - - @Override - public Iterator iterator() { - return new Iterator<>() { - final Queue mems = new ArrayDeque<>(mem); - - @Override - public boolean hasNext() { - return !mems.isEmpty(); - } - - @Override - public Memory next() { - return mems.poll(); - } - }; - } - - @Override - public void addLocalResponseHeadersCache(URL location, Map> local) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Map> getLocalResponseHeadersCache(URL location) { - throw new UnsupportedOperationException("Not supported yet."); - } - - public enum Case { - ERR("Error"), - FLR("Failure"), - MSG("Message"), - FRM("Format"), - INP("Input"); - - final String msg; - - Case(String msg) { - this.msg = msg; - } - - @Override - public String toString() { - return msg; - } - - } - - final Queue mem = new ArrayDeque<>(); - boolean verb = true; - boolean silent = false; - private Queue> lineAccept = new ArrayDeque<>(); - - public void nextInput(String input) { - lineAccept.add((m) -> input); - } - - public final class Memory { - - public final boolean silent; - public final Case cas; - public final String key; - public final Object[] params; - public final Throwable t; - - Memory(final Case cas, final String key, final Object[] params, Throwable t) { - this.key = key; - this.params = params; - this.cas = cas; - this.t = t; - this.silent = MemoryFeedback.this.silent; - } - - Memory(final Case cas, final String key, final Object[] params) { - this(cas, key, params, null); - } - - Memory(String response) { - this(Case.INP, response, new Object[0]); - } - - @Override - public String toString() { - return cas + ": " + key + ": " + Arrays.toString(params) + (t == null ? "" : ": " + t.getClass()) + "; silent=" + this.silent; - } - } - - public boolean isEmpty() { - return mem.isEmpty(); - } - - public int size() { - return mem.size(); - } - - private static void assEq(Object exp, Object obj, Supplier msg) { - try { - assertEquals(exp, obj); - } catch (AssertionError ae) { - throw new AssertionError(msg.get() + " " + ae.getLocalizedMessage()); - } - } - - private static Supplier form(String format, Object... args) { - return () -> String.format(format, args); - } - - private static final String CASE = "Feedback type."; - private static final String KEY = "Feedback type:\"%s\" key."; - private static final String FEEDBACK = "Feedback type:\"%s\" key:\"%s\""; - - public Memory checkMem(Case cas, String key) { - return checkMem(cas, key, true); - } - - private Memory checkMem(Case cas, String key, boolean paramCheck) { - Memory m = mem.poll(); - assert m != null : "There was no Feedback memory to check."; - assertEquals(CASE, cas, m.cas); - assEq(key, m.key, form(KEY, cas)); - if (paramCheck && m.params.length > 0) { - System.out.printf("Unchecked Feedback parameters:\n\t" + FEEDBACK + "\n\tParameters: %s\n", cas, key, Arrays.toString(m.params)); - } - return m; - } - - private static final String PARAMS_LENGTH = FEEDBACK + " parameter count."; - private static final String PARAM = FEEDBACK + " parameter."; - - public Memory checkMem(Case cas, String key, Object... params) { - Memory m = checkMem(cas, key, false); - assEq(params.length, m.params.length, form(PARAMS_LENGTH, cas, key)); - for (int i = 0; i < params.length; ++i) { - assEq(params[i], m.params[i], form(PARAM, cas, key)); - } - return m; - } - - @Override - public void error(String key, Throwable t, Object... params) { - mem.add(new Memory(Case.ERR, key, params, t)); - } - - @Override - public RuntimeException failure(String key, Throwable t, Object... params) { - mem.add(new Memory(Case.FLR, key, params, t)); - return null; - } - - @Override - public String l10n(String key, Object... params) { - mem.add(new Memory(Case.FRM, key, params)); - return null; - } - - @Override - public void message(String bundleKey, Object... params) { - mem.add(new Memory(Case.MSG, bundleKey, params)); - } - - @Override - public void output(String bundleKey, Object... params) { - mem.add(new Memory(Case.MSG, bundleKey, params)); - } - - @Override - public void outputPart(String bundleKey, Object... params) { - mem.add(new Memory(Case.MSG, bundleKey, params)); - } - - @Override - public String toString() { - return "Feedback memory dump:\n\t" + mem.stream().sequential().map(m -> m.toString()).collect(Collectors.joining("\n\t")); - } - - @Override - public boolean verbosePart(String bundleKey, Object... params) { - return verb; - } - - @Override - public boolean verboseOutput(String bundleKey, Object... params) { - return verb; - } - - @Override - public Feedback withBundle(Class clazz) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean verbatimOut(String msg, boolean verbose) { - return verbose; - } - - @Override - public boolean verbatimPart(String msg, boolean verbose) { - return verbose; - } - - @Override - public boolean verbatimPart(String msg, boolean error, boolean verbose) { - return verbose; - } - - @Override - public boolean backspace(int chars, boolean beVerbose) { - return verb; - } - - @Override - public boolean isNonInteractive() { - return verb; - } - - @Override - public String acceptLine(boolean autoYes) { - if (autoYes) { - return input(AUTO_YES); - } - Function fnc = lineAccept.poll(); - if (fnc == null) { - return input(null); - } - return input(fnc.apply(mem.peek())); - } - - private String input(String memObj) { - mem.add(new Memory(memObj)); - return memObj; - } - - @Override - public char[] acceptPassword() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void addLocalFileCache(URL location, Path local) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Path getLocalCache(URL location) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean isSilent() { - return this.silent; - } - - @Override - public boolean setSilent(boolean silent) { - boolean wasSilent = this.silent; - this.silent = silent; - return wasSilent; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/MockURLConnection.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/MockURLConnection.java deleted file mode 100644 index 59520a8c71b3..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/MockURLConnection.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.URL; -import java.net.URLConnection; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; - -public class MockURLConnection extends URLConnection { - private final URLConnection clu; - private final IOException theException; - - public MockURLConnection(URLConnection clu, URL url, IOException theException) { - super(url); - this.clu = clu; - this.theException = theException != null ? theException : new FileNotFoundException(); - } - - @Override - public InputStream getInputStream() throws IOException { - connect(); - return clu.getInputStream(); - } - - @Override - public String getHeaderField(int n) { - try { - connect(); - } catch (IOException ex) { - Logger.getLogger(CatalogIterableTest.class.getName()).log(Level.SEVERE, null, ex); - } - return super.getHeaderField(n); - } - - @Override - public Map> getHeaderFields() { - try { - connect(); - } catch (IOException ex) { - Logger.getLogger(CatalogIterableTest.class.getName()).log(Level.SEVERE, null, ex); - } - return super.getHeaderFields(); - } - - @Override - public void connect() throws IOException { - throw theException; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/SimpleGetoptTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/SimpleGetoptTest.java deleted file mode 100644 index 55ba63ac6a94..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/SimpleGetoptTest.java +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -public class SimpleGetoptTest extends TestBase { - SimpleGetopt getopt; - String errorKey; - Object[] errorParams; - - @Rule public ExpectedException exception = ExpectedException.none(); - - @Before - public void setUp() { - Map g = new HashMap<>(ComponentInstaller.globalOptions); - g.put("8", "=C"); - g.put("long-user", "U"); - g.put("U", "s"); - getopt = new SimpleGetopt(g) { - @Override - public RuntimeException err(String messageKey, Object... args) { - errorKey = messageKey; - errorParams = args; - throw new FailedOperationException(messageKey); - } - }; - for (String s : ComponentInstaller.commands.keySet()) { - getopt.addCommandOptions(s, ComponentInstaller.commands.get(s).supportedOptions()); - } - } - - private void setParams(String p) { - getopt.setParameters(new LinkedList<>(Arrays.asList(p.split(" +")))); - } - - @Test - public void testMissingCommand() { - setParams(""); - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_MissingCommand"); - getopt.process(); - } - - @Test - public void testUnknownCommand() { - setParams("foo"); - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_UnknownCommand"); - getopt.process(); - } - - @Test - public void testUnknownCommandWithOptions() { - setParams("-e -v foo -h"); - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_UnknownCommand"); - getopt.process(); - } - - @Test - public void testSpecificOptionsPrecedeCommand() { - setParams("-s info -h"); - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_UnsupportedGlobalOption"); - getopt.process(); - } - - @Test - public void testUnknownOption() { - setParams("install -S -h"); - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_UnsupportedOption"); - getopt.process(); - } - - @Test - public void testUnknownOptionIgnoredBecauseOfHelp() { - setParams("install -h -s"); - getopt.process(); - - assertNotNull(getopt.getOptValues().get("h")); - // not processex - assertNull(getopt.getOptValues().get("s")); - } - - @Test - public void testCommandWithSeparateOptions() { - setParams("-e -v install -h"); - - getopt.process(); - - String cmd = getopt.getCommand(); - Map opts = getopt.getOptValues(); - - assertNotNull(opts.get("e")); - assertNotNull(opts.get("v")); - assertNotNull(opts.get("h")); - assertEquals("install", cmd); - } - - @Test - public void testGlobalOptionAfterCommand() { - setParams("-e install -v -h"); - - getopt.process(); - - String cmd = getopt.getCommand(); - Map opts = getopt.getOptValues(); - - assertNotNull(opts.get("e")); - assertNotNull(opts.get("v")); - assertNotNull(opts.get("h")); - assertEquals("install", cmd); - } - - @Test - public void testPositonalParamsMixedWithOptions() { - setParams("-e -v install param1 -f param2 -r param3"); - - getopt.process(); - - Map opts = getopt.getOptValues(); - assertNotNull(opts.get("e")); - assertNotNull(opts.get("f")); - assertNotNull(opts.get("r")); - assertNull(opts.get("h")); - - assertEquals(Arrays.asList("param1", "param2", "param3"), getopt.getPositionalParameters()); - } - - @Test - public void testParametrizedOption() { - setParams("-C catalog -v install -h"); - getopt.process(); - - String cmd = getopt.getCommand(); - Map opts = getopt.getOptValues(); - - assertNotNull(opts.get("C")); - assertNotNull(opts.get("v")); - assertNotNull(opts.get("h")); - assertEquals("install", cmd); - assertEquals("catalog", opts.get("C")); - } - - @Test - public void testInterleavedParametrizedOptions() { - setParams("-e install param1 -C catalog param2 -r param3"); - getopt.process(); - - Map opts = getopt.getOptValues(); - assertNotNull(opts.get("e")); - assertNotNull(opts.get("C")); - assertNotNull(opts.get("r")); - assertEquals("catalog", opts.get("C")); - - assertEquals(Arrays.asList("param1", "param2", "param3"), getopt.getPositionalParameters()); - } - - @Test - public void testMaskedOutOption() { - setParams("-u list param1"); - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_UnsupportedOption"); - getopt.process(); - } - - @Test - public void testMaskedOutOption2() { - setParams("list -u param1"); - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_UnsupportedOption"); - getopt.process(); - } - - @Test - public void testMergedOptions() { - setParams("list param1 -vel param2"); - getopt.process(); - - Map opts = getopt.getOptValues(); - assertNotNull(opts.get("e")); - assertNotNull(opts.get("v")); - assertNotNull(opts.get("l")); - assertEquals(Arrays.asList("param1", "param2"), getopt.getPositionalParameters()); - } - - @Test - public void testOptionWithImmediateParameter() { - setParams("list param1 -veCcatalog param2"); - getopt.process(); - - Map opts = getopt.getOptValues(); - assertNotNull(opts.get("e")); - assertNotNull(opts.get("v")); - assertNotNull(opts.get("C")); - assertEquals("catalog", opts.get("C")); - assertEquals(Arrays.asList("param1", "param2"), getopt.getPositionalParameters()); - } - - @Test - public void testOptionsTerminated() { - setParams("-e install param1 -C catalog -- param2 -r param3"); - getopt.process(); - - Map opts = getopt.getOptValues(); - assertNotNull(opts.get("e")); - assertNotNull(opts.get("C")); - assertNull(opts.get("r")); - assertEquals("catalog", opts.get("C")); - - assertEquals(Arrays.asList("param1", "param2", "-r", "param3"), getopt.getPositionalParameters()); - } - - @Test - public void testAmbiguousCommand() { - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_AmbiguousCommand"); - setParams("in"); - getopt.process(); - } - - @Test - public void testEmptyCommand() { - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_MissingCommand"); - getopt.setParameters(new LinkedList<>(Arrays.asList(""))); - getopt.process(); - } - - @Test - public void testEmptyParameter() { - getopt.setParameters(new LinkedList<>(Arrays.asList("install", ""))); - getopt.process(); - assertEquals(Arrays.asList(""), getopt.getPositionalParameters()); - } - - @Test - public void testDoubleDashOption() { - setParams("--e --v install --x param1"); - - getopt.process(); - - String cmd = getopt.getCommand(); - Map opts = getopt.getOptValues(); - - assertNotNull(opts.get("e")); - assertNotNull(opts.get("v")); - assertNotNull(opts.get("x")); - assertEquals("install", cmd); - assertEquals(Arrays.asList("param1"), getopt.getPositionalParameters()); - } - - @Test - public void testDoubleDashParamOption() { - setParams("--e --v install --C catalog --x param1"); - - getopt.process(); - - String cmd = getopt.getCommand(); - Map opts = getopt.getOptValues(); - - assertNotNull(opts.get("e")); - assertNotNull(opts.get("v")); - assertNotNull(opts.get("x")); - assertNotNull(opts.get("C")); - assertEquals("catalog", opts.get("C")); - - assertEquals("install", cmd); - assertEquals(Arrays.asList("param1"), getopt.getPositionalParameters()); - } - - @Test - public void testLongOption() { - setParams("--help"); - getopt.process(); - - Map opts = getopt.getOptValues(); - assertNotNull(opts.get("h")); - - // should not be interpreted as a series of single options: - assertNull(opts.get("e")); - assertNull(opts.get("l")); - assertNull(opts.get("p")); - } - - @Test - public void testLongOptionAppendedParameter() { - setParams("--catalogbubu"); - - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_UnsupportedGlobalOption"); - getopt.process(); - } - - @Test - public void testLongOptionWithParameterBeforeCommand() { - setParams("--custom-catalog bubu install"); - - getopt.process(); - - Map opts = getopt.getOptValues(); - assertEquals("bubu", opts.get("C")); - } - - @Test - public void testLongOptionWithParameterAfterCommand() { - setParams("install --custom-catalog bubu "); - - getopt.process(); - Map opts = getopt.getOptValues(); - assertEquals("bubu", opts.get("C")); - } - - @Test - public void testComputeAbbreviations() { - setParams("install --user bubu"); - Map abbrevs = getopt.computeAbbreviations(Arrays.asList("list", "list-files", "file-list", "force", "replace", "rewrite", "verify", "signature")); - - assertEquals(null, abbrevs.get("list")); - assertEquals("list-files", abbrevs.get("list-")); - assertEquals("list-files", abbrevs.get("list-file")); - - assertEquals("force", abbrevs.get("fo")); - - assertEquals(null, abbrevs.get("re")); - assertEquals("rewrite", abbrevs.get("rew")); - assertEquals("replace", abbrevs.get("rep")); - } - - @Test - public void testLongOptionAbbreviation() { - setParams("install --long-user bubu"); - - getopt.process(); - Map opts = getopt.getOptValues(); - assertEquals("bubu", opts.get("U")); - } - - @Test - public void testOptionAliasesNoParam() { - setParams("install -F bubu"); - getopt.process(); - Map opts = getopt.getOptValues(); - assertEquals("", opts.get("L")); - } - - @Test - public void testOptionAliasesParamsCommand() { - setParams("install -9 bubu"); - getopt.addCommandOption("install", "9", "=C"); - getopt.process(); - Map opts = getopt.getOptValues(); - assertEquals("bubu", opts.get("C")); - } - - @Test - public void testOptionAliasesParamsGlobal() { - setParams("install -8 bubu"); - getopt.process(); - Map opts = getopt.getOptValues(); - assertEquals("bubu", opts.get("C")); - } - - @Test - public void testIgnoreUnknownCommands() { - setParams("-v bubak 1"); - getopt.ignoreUnknownCommands(true); - getopt.process(); - Map opts = getopt.getOptValues(); - assertEquals(1, opts.size()); - assertNotNull(opts.get("v")); - - assertEquals(2, getopt.getPositionalParameters().size()); - assertEquals("bubak", getopt.getPositionalParameters().get(0)); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/SystemUtilsTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/SystemUtilsTest.java deleted file mode 100644 index ef4e086f2400..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/SystemUtilsTest.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -/** - * - * @author sdedic - */ -public class SystemUtilsTest { - @Rule public ExpectedException exception = ExpectedException.none(); - - @Test - public void testDiscardEmptyComponents() throws Exception { - Path base = Paths.get("graalvm"); - Path resolved = SystemUtils.fromCommonRelative(base, "jre/lib//svm/macros/graalpython-launcher/native-image.properties"); // NOI18N - for (Path p : resolved) { - assertFalse(p.toString().isEmpty()); - } - assertEquals("jre/lib/svm/macros/graalpython-launcher/native-image.properties", SystemUtils.toCommonPath(resolved)); - } - - @Test - public void testDiscardEmptyDoesNotAddLevel() throws Exception { - Path base = Paths.get("graalvm"); - exception.expect(IllegalArgumentException.class); - SystemUtils.fromCommonRelative(base, "jre/lib//../../../error"); // NOI18N - } - - @Test - public void testNoURLParameters() throws Exception { - Map params = new HashMap<>(); - String base = SystemUtils.parseURLParameters("http://acme.org/bu?", params); - assertEquals("http://acme.org/bu", base); - assertEquals(0, params.size()); - } - - @Test - public void testURLParameterNoEqual() throws Exception { - Map params = new HashMap<>(); - String base = SystemUtils.parseURLParameters("http://acme.org/bu?a", params); - assertEquals("http://acme.org/bu", base); - assertEquals(1, params.size()); - assertEquals("", params.get("a")); - } - - @Test - public void testURLMoreParametersNoEqual() throws Exception { - Map params = new HashMap<>(); - String base = SystemUtils.parseURLParameters("http://acme.org/bu?a&b", params); - assertEquals("http://acme.org/bu", base); - assertEquals(2, params.size()); - assertEquals("", params.get("a")); - assertEquals("", params.get("b")); - } - - @Test - public void testURLParameterOnlyEqual() throws Exception { - Map params = new HashMap<>(); - String base = SystemUtils.parseURLParameters("http://acme.org/bu?a=", params); - assertEquals("http://acme.org/bu", base); - assertEquals(1, params.size()); - assertEquals("", params.get("a")); - } - - @Test - public void testURLMoreParametersOnlyEqual() throws Exception { - Map params = new HashMap<>(); - String base = SystemUtils.parseURLParameters("http://acme.org/bu?a=&b=", params); - assertEquals("http://acme.org/bu", base); - assertEquals(2, params.size()); - assertEquals("", params.get("a")); - assertEquals("", params.get("b")); - } - - @Test - public void testBuildUrlStringWithParameters() throws Exception { - Map> params = new HashMap<>(); - String baseUrl = "http://acme.org/bu"; - String url = SystemUtils.buildUrlStringWithParameters(baseUrl, params); - assertEquals(baseUrl, url); - - List param1 = new ArrayList<>(); - params.put("a", param1); - url = SystemUtils.buildUrlStringWithParameters(baseUrl, params); - assertEquals(baseUrl, url); - - param1.add("b"); - url = SystemUtils.buildUrlStringWithParameters(baseUrl, params); - assertEquals(baseUrl + "?a=b", url); - - param1.add("c"); - url = SystemUtils.buildUrlStringWithParameters(baseUrl, params); - assertEquals(baseUrl + "?a=b&a=c", url); - - List param2 = new ArrayList<>(); - param2.add("e"); - params.put("d", param2); - url = SystemUtils.buildUrlStringWithParameters(baseUrl, params); - assertEquals(baseUrl + "?a=b&a=c&d=e", url); - - params.clear(); - param1.clear(); - param1.add("\""); - params.put("&", param1); - url = SystemUtils.buildUrlStringWithParameters(baseUrl, params); - assertEquals(baseUrl + "?%26=%22", url); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/TestBase.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/TestBase.java deleted file mode 100644 index 71108761f718..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/TestBase.java +++ /dev/null @@ -1,754 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import static org.junit.Assert.fail; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.StandardCopyOption; -import java.nio.file.attribute.BasicFileAttributes; -import java.text.MessageFormat; -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; -import java.util.Map; -import java.util.ResourceBundle; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import org.junit.After; - -import org.junit.AfterClass; -import org.junit.ClassRule; -import org.junit.Rule; -import org.junit.rules.TemporaryFolder; -import org.junit.rules.TestName; - -/** - * Boilerplate for tests. - */ -public class TestBase implements Feedback { - private static final ResourceBundle NO_BUNDLE = new ResourceBundle() { - @Override - protected Object handleGetObject(String key) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Enumeration getKeys() { - throw new UnsupportedOperationException("Not supported yet."); - } - }; - protected ResourceBundle defaultBundle = ResourceBundle.getBundle("org.graalvm.component.installer.Bundle"); // NOI18N - private Feedback feedbackDelegate; - protected boolean verbose; - - @ClassRule public static TemporaryFolder expandedFolder = new ClassTempFolder(); - @Rule public TemporaryFolder testFolder = new TemporaryFolder(); - @Rule public TestName testName = new TestName(); - - public TestBase() { - } - - @Override - public boolean isSilent() { - return feedbackDelegate == null ? false : feedbackDelegate.isSilent(); - } - - @Override - public boolean setSilent(boolean silent) { - return feedbackDelegate == null ? false : feedbackDelegate.setSilent(silent); - } - - @Override - public void addLocalResponseHeadersCache(URL location, Map> local) { - - } - - @Override - public Map> getLocalResponseHeadersCache(URL location) { - return null; - } - - static class ClassTempFolder extends TemporaryFolder { - ThreadLocal root = new ThreadLocal<>(); - - @Override - public void delete() { - File folder = root.get(); - if (folder != null) { - recursiveDelete(folder); - } - root.set(null); - } - - private void recursiveDelete(File file) { - File[] files = file.listFiles(); - if (files != null) { - for (File each : files) { - recursiveDelete(each); - } - } - file.delete(); - } - - @Override - public File getRoot() { - return root.get(); - } - - @Override - public void create() throws IOException { - File createdFolder = File.createTempFile("junit", "", null); - createdFolder.delete(); - createdFolder.mkdir(); - root.set(createdFolder); - } - - } - - protected static Path expandedJarPath = null; - - protected void delegateFeedback(Feedback delegate) { - this.feedbackDelegate = delegate; - } - - @AfterClass - public static void cleanupExpandedPath() { - expandedJarPath = null; - } - - public void expandJar() throws IOException { - if (expandedJarPath != null) { - return; - } - URL location = getClass().getProtectionDomain().getCodeSource().getLocation(); - File f; - try { - f = new File(location.toURI()); - } catch (URISyntaxException ex) { - fail(ex.getMessage()); - return; // keep compiler happy - } - if (f.isDirectory()) { - // ok, we can access files directly - return; - } - expandedJarPath = expandedFolder.newFolder("expanded-data").toPath(); - JarFile jf = new JarFile(f); - for (JarEntry en : Collections.list(jf.entries())) { - Path target = expandedJarPath.resolve(SystemUtils.fromCommonString(en.getName())); - if (en.isDirectory()) { - Files.createDirectories(target); - } else { - Files.createDirectories(target.getParent()); - try (InputStream is = jf.getInputStream(en)) { - Files.copy(is, target, StandardCopyOption.REPLACE_EXISTING); - } - } - } - } - - protected Path dataFile(String relative) throws IOException { - expandJar(); - URL u = getClass().getClassLoader().getResource(getClass().getName().replace('.', '/') + ".class"); - Path basePath; - if (expandedJarPath != null) { - String n = getClass().getName(); - n = n.substring(0, n.lastIndexOf('.')).replace('.', '/'); - basePath = expandedJarPath.resolve(SystemUtils.fromCommonString(n)); - } else { - try { - basePath = Paths.get(u.toURI()).getParent(); - } catch (URISyntaxException ex) { - fail("URI error"); - return null; - } - } - return basePath.resolve(SystemUtils.fromCommonString(relative)); - } - - protected InputStream dataStream(String relative) { - String n = getClass().getName(); - n = n.substring(0, n.lastIndexOf('.')).replace('.', '/'); - return getClass().getClassLoader().getResourceAsStream(n + "/" + relative); - } - - protected void copyDir(String subdir, Path to) throws IOException { - Path subdirPath = dataFile(subdir); - Files.walkFileTree(subdirPath, new CopyDir(subdirPath, to)); - } - - public class CopyDir extends SimpleFileVisitor { - private Path sourceDir; - private Path targetDir; - - public CopyDir(Path sourceDir, Path targetDir) { - this.sourceDir = sourceDir; - this.targetDir = targetDir; - } - - @Override - public FileVisitResult visitFile(Path file, - BasicFileAttributes attributes) throws IOException { - Path targetFile = targetDir.resolve(sourceDir.relativize(file)); - Files.copy(file, targetFile); - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult preVisitDirectory(Path dir, - BasicFileAttributes attributes) throws IOException { - Path newDir = targetDir.resolve(sourceDir.relativize(dir)); - Files.createDirectories(newDir); - return FileVisitResult.CONTINUE; - } - } - - public void message(ResourceBundle bundle, String bundleKey, Object... params) { - if (bundle != null) { - MessageFormat.format(bundle.getString(bundleKey), params); - } - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(bundle == null ? NO_BUNDLE : bundle); - } - if (feedbackDelegate != null) { - feedbackDelegate.message(bundleKey, params); - } - } - - public void output(ResourceBundle bundle, String bundleKey, Object... params) { - if (bundle != null) { - MessageFormat.format(bundle.getString(bundleKey), params); - } - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(bundle == null ? NO_BUNDLE : bundle); - } - if (feedbackDelegate != null) { - feedbackDelegate.output(bundleKey, params); - } - } - - @Override - public void outputPart(String bundleKey, Object... params) { - output(defaultBundle, bundleKey, params); - } - - @Override - public boolean verbatimPart(String msg, boolean error, boolean beVerbose) { - return verbatimPart(msg, beVerbose); - } - - @Override - public boolean verbatimPart(String msg, boolean beVerbose) { - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(NO_BUNDLE); - } - try { - if (feedbackDelegate != null) { - return feedbackDelegate.verbatimPart(msg, beVerbose); - } - } finally { - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(null); - } - } - return verbose; - } - - public void verbosePart(ResourceBundle bundle, String bundleKey, Object... params) { - if (bundle != null && bundleKey != null) { - MessageFormat.format(bundle.getString(bundleKey), params); - } - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(bundle == null ? NO_BUNDLE : bundle); - } - if (feedbackDelegate != null) { - feedbackDelegate.verbosePart(bundleKey, params); - } - } - - public void verboseOutput(ResourceBundle bundle, String bundleKey, Object... params) { - if (bundle != null && bundleKey != null) { - MessageFormat.format(bundle.getString(bundleKey), params); - } - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(bundle == null ? NO_BUNDLE : bundle); - } - if (feedbackDelegate != null) { - feedbackDelegate.verboseOutput(bundleKey, params); - } - } - - public void error(ResourceBundle bundle, String key, Throwable t, Object... params) { - if (bundle != null) { - MessageFormat.format(bundle.getString(key), params); - } - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(bundle == null ? NO_BUNDLE : bundle); - } - if (feedbackDelegate != null) { - feedbackDelegate.error(key, t, params); - } - } - - public String l10n(ResourceBundle bundle, String key, Object... params) { - if (bundle != null) { - MessageFormat.format(bundle.getString(key), params); - } - if (feedbackDelegate != null) { - String s; - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(bundle); - } - s = feedbackDelegate.l10n(key, params); - if (s != null) { - return s; - } - } - if (key.endsWith("@") && bundle != null) { - return MessageFormat.format(bundle.getString(key), params); - } else { - return key; - } - } - - public String reallyl10n(ResourceBundle bundle, String key, Object... params) { - ResourceBundle b = bundle != null ? bundle : defaultBundle; - return MessageFormat.format(b.getString(key), params); - } - - @Override - public boolean verbatimOut(String msg, boolean verboseOutput) { - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(NO_BUNDLE); - } - try { - if (verboseOutput) { - verboseOutput((ResourceBundle) null, msg); - } else { - if (feedbackDelegate != null) { - feedbackDelegate.verbatimOut(msg, verboseOutput); - } - output((ResourceBundle) null, msg); - } - } finally { - if (feedbackDelegate instanceof FeedbackAdapter) { - ((FeedbackAdapter) feedbackDelegate).setBundle(null); - } - } - return verboseOutput; - } - - public RuntimeException failure(ResourceBundle bundle, String key, Throwable t, Object... params) { - MessageFormat.format(bundle.getString(key), params); - throw new FailedOperationException(key, t); - } - - @Override - public void message(String bundleKey, Object... params) { - message(defaultBundle, bundleKey, params); - } - - @Override - public void output(String bundleKey, Object... params) { - output(defaultBundle, bundleKey, params); - } - - @Override - public boolean backspace(int chars, boolean beVerbose) { - if (beVerbose && !verbose) { - return false; - } - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < chars; i++) { - sb.append('\b'); - } - if (beVerbose) { - verbosePart((ResourceBundle) null, sb.toString()); - } else { - output((ResourceBundle) null, sb.toString()); - } - return verbose; - } - - @Override - public boolean verbosePart(String bundleKey, Object... params) { - verbosePart(defaultBundle, bundleKey, params); - return verbose; - } - - @Override - public boolean verboseOutput(String bundleKey, Object... params) { - verboseOutput(defaultBundle, bundleKey, params); - return verbose; - } - - @Override - public void error(String key, Throwable t, Object... params) { - error(defaultBundle, key, t, params); - } - - @Override - public String l10n(String key, Object... params) { - return l10n(defaultBundle, key, params); - } - - @Override - public RuntimeException failure(String key, Throwable t, Object... params) { - return failure(defaultBundle, key, t, params); - } - - @Override - public Feedback withBundle(Class clazz) { - return new WB(clazz); - } - - class WB implements Feedback { - ResourceBundle localBundle; - - @Override - public void message(String bundleKey, Object... params) { - TestBase.this.message(localBundle, bundleKey, params); - } - - @Override - public void output(String bundleKey, Object... params) { - TestBase.this.output(localBundle, bundleKey, params); - } - - @Override - public boolean verbosePart(String bundleKey, Object... params) { - TestBase.this.verbosePart(localBundle, bundleKey, params); - return verbose; - } - - @Override - public boolean verboseOutput(String bundleKey, Object... params) { - TestBase.this.verboseOutput(localBundle, bundleKey, params); - return verbose; - } - - @Override - public void error(String key, Throwable t, Object... params) { - TestBase.this.error(localBundle, key, t, params); - } - - @Override - public String l10n(String key, Object... params) { - return TestBase.this.l10n(localBundle, key, params); - } - - @Override - public RuntimeException failure(String key, Throwable t, Object... params) { - return TestBase.this.failure(localBundle, key, t, params); - } - - @Override - public boolean verbatimOut(String msg, boolean beVerbose) { - return TestBase.this.verbatimOut(msg, beVerbose); - } - - WB(Class clazz) { - String s = clazz.getName(); - s = s.substring(0, s.lastIndexOf('.')); - this.localBundle = ResourceBundle.getBundle(s + ".Bundle"); // NOI18N - } - - @Override - public Feedback withBundle(Class clazz) { - return new WB(clazz); - } - - @Override - public void outputPart(String bundleKey, Object... params) { - TestBase.this.output(localBundle, bundleKey, params); - } - - @Override - public boolean verbatimPart(String msg, boolean error, boolean beVerbose) { - return TestBase.this.verbatimPart(msg, error, beVerbose); - } - - @Override - public boolean verbatimPart(String msg, boolean beVerbose) { - return TestBase.this.verbatimPart(msg, beVerbose); - } - - @Override - public boolean backspace(int chars, boolean beVerbose) { - return TestBase.this.backspace(chars, beVerbose); - } - - @Override - public String acceptLine(boolean autoYes) { - return TestBase.this.acceptLine(autoYes); - } - - @Override - public char[] acceptPassword() { - return TestBase.this.acceptPassword(); - } - - @Override - public void addLocalFileCache(URL location, Path local) { - TestBase.this.addLocalFileCache(location, local); - } - - @Override - public Path getLocalCache(URL location) { - return TestBase.this.getLocalCache(location); - } - - @Override - public boolean isNonInteractive() { - return TestBase.this.isNonInteractive(); - } - - @Override - public boolean isSilent() { - return TestBase.this.isSilent(); - } - - @Override - public boolean setSilent(boolean silent) { - return TestBase.this.setSilent(silent); - } - - @Override - public void addLocalResponseHeadersCache(URL location, Map> local) { - TestBase.this.addLocalResponseHeadersCache(location, local); - } - - @Override - public Map> getLocalResponseHeadersCache(URL location) { - return TestBase.this.getLocalResponseHeadersCache(location); - } - } - - public class FeedbackAdapter implements Feedback { - private ResourceBundle currentBundle; - private boolean silent; - - @Override - public boolean verbatimOut(String msg, boolean beVerbose) { - return verbose; - } - - @Override - public void message(String bundleKey, Object... params) { - } - - @Override - public void output(String bundleKey, Object... params) { - } - - @Override - public boolean verbosePart(String bundleKey, Object... params) { - return verbose; - } - - @Override - public boolean verboseOutput(String bundleKey, Object... params) { - return verbose; - } - - @Override - public void error(String key, Throwable t, Object... params) { - } - - @Override - public String l10n(String key, Object... params) { - return null; - } - - @Override - public RuntimeException failure(String key, Throwable t, Object... params) { - return null; - } - - @Override - public Feedback withBundle(Class clazz) { - return this; - } - - @Override - public void outputPart(String bundleKey, Object... params) { - } - - @Override - public boolean verbatimPart(String msg, boolean error, boolean beVerbose) { - return verbose; - } - - @Override - public boolean verbatimPart(String msg, boolean beVerbose) { - return verbose; - } - - @Override - public boolean backspace(int chars, boolean beVerbose) { - return verbose; - } - - protected String reallyl10n(String k, Object... params) { - return TestBase.this.reallyl10n(getBundle(), k, params); - } - - protected ResourceBundle getBundle() { - if (currentBundle == NO_BUNDLE) { - return null; - } - if (currentBundle != null) { - return currentBundle; - } - return defaultBundle; - } - - void setBundle(ResourceBundle bundle) { - this.currentBundle = bundle; - } - - @Override - public String acceptLine(boolean autoYes) { - return TestBase.this.doAcceptLine(autoYes); - } - - @Override - public char[] acceptPassword() { - return TestBase.this.doAcceptPassword(); - } - - @Override - public void addLocalFileCache(URL location, Path local) { - TestBase.this.addLocalFileCache(location, local); - } - - @Override - public Path getLocalCache(URL location) { - return TestBase.this.getLocalCache(location); - } - - @Override - public boolean isNonInteractive() { - return TestBase.this.isNonInteractive(); - } - - @Override - public boolean isSilent() { - return silent; - } - - @Override - public boolean setSilent(boolean silent) { - boolean wasSilent = this.silent; - this.silent = silent; - return wasSilent; - } - - @Override - public void addLocalResponseHeadersCache(URL location, Map> local) { - TestBase.this.addLocalResponseHeadersCache(location, local); - } - - @Override - public Map> getLocalResponseHeadersCache(URL location) { - return TestBase.this.getLocalResponseHeadersCache(location); - } - } - - @Override - public boolean isNonInteractive() { - return false; - } - - public static boolean isWindows() { - return SystemUtils.isWindows(); - } - - protected StringBuilder userInput = new StringBuilder(); - protected String password; - protected boolean autoYesEnabled; - - @Override - public String acceptLine(boolean autoYes) { - if (feedbackDelegate != null) { - return feedbackDelegate.acceptLine(autoYes); - } - return doAcceptLine(autoYes); - } - - String doAcceptLine(boolean autoYes) { - if (autoYes && autoYesEnabled) { - return AUTO_YES; - } - int nl = userInput.indexOf("\n"); - if (nl < 0) { - nl = userInput.length(); - } - String r = userInput.substring(0, nl); - userInput.delete(0, nl + 1); // including the newline - return r; - } - - @Override - public char[] acceptPassword() { - if (feedbackDelegate != null) { - return feedbackDelegate.acceptPassword(); - } - return doAcceptPassword(); - } - - public char[] doAcceptPassword() { - return password == null ? null : password.toCharArray(); - } - - @Override - public void addLocalFileCache(URL location, Path local) { - - } - - @Override - public Path getLocalCache(URL location) { - return null; - } - - @After - public void disableLicenseAfterTest() { - SystemUtils.licenseTracking = false; - } - - public static void enableLicensesForTesting() { - SystemUtils.licenseTracking = true; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/VersionTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/VersionTest.java deleted file mode 100644 index 7267fc4081b1..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/VersionTest.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -/** - * - * @author sdedic - */ -public class VersionTest { - @Rule public ExpectedException exception = ExpectedException.none(); - - @Test - public void testNoVersionInfimum() throws Exception { - Version otherNullVersion = Version.fromString(Version.NO_VERSION.toString()); - - assertTrue(otherNullVersion.compareTo(Version.NO_VERSION) > 0); - assertTrue(Version.NO_VERSION.compareTo(otherNullVersion) < 0); - - assertFalse(otherNullVersion.equals(Version.NO_VERSION)); - assertFalse(Version.NO_VERSION.equals(otherNullVersion)); - } - - @Test - public void testNoVersionEqualToSelf() throws Exception { - assertTrue(Version.NO_VERSION.compareTo(Version.NO_VERSION) == 0); - assertTrue(Version.NO_VERSION.equals(Version.NO_VERSION)); - } - - @Test - public void testNormalizeTo4Numbers() throws Exception { - assertEquals("1.0.0.0-0.r", Version.fromString("1.0-r").toString()); - assertEquals("1.0.0.0-0.r", Version.fromString("1.0.0-r").toString()); - assertEquals("1.0.0.0-0.r", Version.fromString("1.0.0.0-r").toString()); - } - - @Test - public void testFailOnTooManyVersions() throws Exception { - exception.expect(IllegalArgumentException.class); - assertEquals("1.0.0.0.0-r", Version.fromString("1.0.0.0.0-r").toString()); - } - - @Test - public void testFailOnTooFewVersions() throws Exception { - exception.expect(IllegalArgumentException.class); - assertEquals("1-r", Version.fromString("1.0.0.0.0-r").toString()); - } - - private static void assertOlder(String older, String newer) { - assertTrue("Versions didn't compare " + older + " < " + newer, - Version.fromString(older).compareTo(Version.fromString(newer)) < 0); - assertFalse(older.equals(newer)); - } - - @Test - public void testVersionOrder() throws Exception { - String[] versionSequence = { - "1.0", - "1.0.1", - "1.1.0", - "1.1.0-0.dev.1", - "1.1.0-0.dev.2", - "1.1.0-0.dev8", - "1.1.0-0.dev.10", - "1.1.0-0.dev13", - "1.1.0-1.beta1", - "1.1.0-1.beta-3", - "1.1.0-1.beta.9", - "1.1.0-1.beta.10", - "1.1.0-1.beta.13", - "1.1.0-1.beta15", - "1.1.0-2", - "1.1.0.2-0.rc.1", - "1.1.0.2-1", - "1.1.0.3", - }; - - for (int i = 0; i < versionSequence.length; i++) { - for (int j = i + 1; j < versionSequence.length; j++) { - assertOlder(versionSequence[i], versionSequence[j]); - } - } - } - - @Test - public void testComponentizeVersion() { - assertEquals("1.0.0.0-0.rc.1", Version.fromString("1.0.0-rc1").toString()); - } - - @Test - public void testDisplayReleaseVersions() { - assertEquals("1.0.0", Version.fromString("1.0.0.0").displayString()); - assertEquals("1.0.0", Version.fromString("1.0.0.0-1").displayString()); - } - - @Test - public void testDisplayPreReleases() { - assertEquals("1.0.0-rc1", Version.fromString("1.0.0.0-1.rc.1").displayString()); - assertEquals("1.0.0-rc9", Version.fromString("1.0.0.0-1.rc.9").displayString()); - } - - @Test - public void testDisplayPreReleaseBuilds() { - assertEquals("1.0.0-beta1.1", Version.fromString("1.0.0.0-1.beta.1.1").displayString()); - assertEquals("1.0.0-beta1.b2", Version.fromString("1.0.0.0-1.beta.1.b.2").displayString()); - } - - @Test - public void testDisplayWildardVersions() { - assertEquals("1.0.0-beta1.1", Version.fromString("1.0.0.0-*.beta.1.1").displayString()); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/AvailableTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/AvailableTest.java deleted file mode 100644 index bd588d00741d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/AvailableTest.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Path; -import java.util.List; -import java.util.Locale; -import java.util.Properties; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENTS; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.persist.test.Handler; -import org.graalvm.component.installer.remote.GraalEditionList; -import org.graalvm.component.installer.MemoryFeedback; -import org.graalvm.component.installer.MemoryFeedback.Memory; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import org.graalvm.shadowed.org.json.JSONArray; -import org.graalvm.shadowed.org.json.JSONObject; -import org.graalvm.shadowed.org.json.JSONTokener; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class AvailableTest extends CommandTestBase { - - private static final String GRAALVM_CE_202_CATALOG = "test://www.graalvm.org/graalvm-20.2-with-updates.properties"; - private static final String GRAALVM_EE_202_CATALOG = "test://www.graalvm.org/graalvmee-20.2-with-updates.properties"; - - private static final String GVM_VERSION = "20.2.0"; - private static final String STABILITY = "ComponentStabilityLevel_undefined"; - - @Rule public final ProxyResource proxyResource = new ProxyResource(); - - private void loadReleaseFile(String name) throws IOException { - try (InputStream stm = getClass().getResourceAsStream("data/" + name)) { - Properties props = new Properties(); - props.load(stm); - props.stringPropertyNames().forEach((s) -> { - String val = props.getProperty(s); - if (val.startsWith("\"") && val.endsWith("\"")) { - val = val.substring(1, val.length() - 1); - } - this.storage.graalInfo.put(s.toLowerCase(Locale.ENGLISH), val); - }); - } - } - - private GraalEditionList editionList; - private AvailableCommand cmd; - - void setupReleaseAndCatalog() throws Exception { - loadReleaseFile("release21ceWithEE.properties"); - - Path f = dataFile("data/graalvm-20.2-with-updates.properties"); - Handler.bind(GRAALVM_CE_202_CATALOG, f.toUri().toURL()); - - Path f2 = dataFile("data/graalvmee-20.2-with-updates.properties"); - Handler.bind(GRAALVM_EE_202_CATALOG, f2.toUri().toURL()); - } - - private void initRemoteStorage() { - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - this.registry = list.createComponentCatalog(this); - this.editionList = list; - } - - void setupGraalVM202() throws Exception { - setupReleaseAndCatalog(); - initRemoteStorage(); - - cmd = new AvailableCommand(); - cmd.init(this, this.withBundle(AvailableCommand.class)); - cmd.execute(); - } - - @Override - public CatalogFactory getCatalogFactory() { - return editionList; - } - - /** - * By default, gu avail should list just its own release's component and NO core package so - * users are not confused. - * - * @throws Exception - */ - @Test - public void testDefaultListWithoutCorePackage() throws Exception { - setupGraalVM202(); - List infos = cmd.getComponents(); - // no core is listed: - assertFalse(infos.stream().filter(i -> CommonConstants.GRAALVM_CORE_PREFIX.equals(i.getId())).findAny().isPresent()); - } - - /** - * Checks that by default, only compatible components are listed, EXCEPT the core, which is - * listed in its newest version, if enabled by switch. - * - * @throws Exception - */ - @Test - public void testDefaultListOnlyCompatibleVersions() throws Exception { - setupGraalVM202(); - List infos = cmd.getComponents(); - // no version other than 20.2.0 is listed: - assertFalse(infos.stream().filter(i -> !i.getVersion().displayString().contains(GVM_VERSION)).findAny().isPresent()); - } - - /** - * Checks that by default, only compatible components are listed, EXCEPT the core, which is - * listed in its newest version, if enabled by switch. - * - * @throws Exception - */ - @Test - public void testListCompatibleVersionsPlusCore() throws Exception { - options.put(Commands.OPTION_SHOW_CORE, ""); - setupGraalVM202(); - List infos = cmd.getComponents(); - // no version other than 20.2.0 is listed: - assertFalse(infos.stream().filter(i -> !i.getVersion().displayString().contains(GVM_VERSION)).findAny().isPresent()); - // the core IS listed! - assertTrue(infos.stream().filter(i -> CommonConstants.GRAALVM_CORE_PREFIX.equals(i.getId())).findAny().isPresent()); - } - - /** - * Checks that updates are listed with a switch. Implies --show-core. - */ - @Test - public void testListUpdates() throws Exception { - options.put(Commands.OPTION_SHOW_UPDATES, ""); - setupGraalVM202(); - List infos = cmd.getComponents(); - // no version other than 20.2.0 is listed: - assertTrue(infos.stream().filter(i -> !i.getVersion().displayString().contains(GVM_VERSION)).findAny().isPresent()); - // the core IS listed! - assertTrue(infos.stream().filter(i -> CommonConstants.GRAALVM_CORE_PREFIX.equals(i.getId())).findAny().isPresent()); - } - - private static ComponentInfo findComponent(List list, String id) { - return list.stream().filter(i -> id.equals(i.getId())).findAny().orElse(null); - } - - /** - * Checks that edition component(s) are listed. Implies --show-core. Note the test data for 20.2 - * does not list R and Python components - * - * @throws Exception - */ - @Test - public void testListEECurrentVersion() throws Exception { - options.put(Commands.OPTION_USE_EDITION, "ee"); - setupGraalVM202(); - List infos = cmd.getComponents(); - - assertNull(findComponent(infos, "org.graalvm.python")); - assertNull(findComponent(infos, "org.graalvm.r")); - - assertNotNull(findComponent(infos, "org.graalvm.ruby")); - assertNotNull(findComponent(infos, "org.graalvm")); - } - - /** - * Checks that edition component(s) are listed. Implies --show-core. Now updates for 20.3.0 - * should be visible. - * - * @throws Exception - */ - @Test - public void testListEEUpdates() throws Exception { - options.put(Commands.OPTION_SHOW_UPDATES, ""); - options.put(Commands.OPTION_USE_EDITION, "ee"); - setupGraalVM202(); - List infos = cmd.getComponents(); - - assertNotNull(findComponent(infos, "org.graalvm.python")); - assertNotNull(findComponent(infos, "org.graalvm.R")); - - assertNotNull(findComponent(infos, "org.graalvm.ruby")); - assertNotNull(findComponent(infos, "org.graalvm")); - } - - /** - * Disables the default version filter. - */ - @Test - public void testListAll() throws Exception { - options.put(Commands.OPTION_ALL, ""); - setupGraalVM202(); - List infos = cmd.getComponents(); - - assertTrue(infos.size() > 8); - } - - @Test - public void testJSONOutput() throws Exception { - options.put(Commands.OPTION_JSON_OUTPUT, ""); - MemoryFeedback mf = new MemoryFeedback(); - this.delegateFeedback(mf); - setupGraalVM202(); - for (Memory mem : mf) { - if (!mem.silent) { - JSONObject jo = new JSONObject(new JSONTokener(mem.key)); - JSONArray comps = jo.getJSONArray(JSON_KEY_COMPONENTS); - assertEquals(6, comps.length()); - for (int i = 0; i < comps.length(); ++i) { - JSONObject comp = comps.getJSONObject(i); - assertEquals(comp.toString(2), GVM_VERSION, comp.getString(CommonConstants.JSON_KEY_COMPONENT_GRAALVM)); - assertEquals(comp.toString(2), GVM_VERSION, comp.getString(CommonConstants.JSON_KEY_COMPONENT_VERSION)); - assertEquals(comp.toString(2), STABILITY, comp.getString(CommonConstants.JSON_KEY_COMPONENT_STABILITY)); - assertTrue(comp.toString(2), comp.getString(CommonConstants.JSON_KEY_COMPONENT_ORIGIN) - .contains(comp.getString(CommonConstants.JSON_KEY_COMPONENT_ID).toLowerCase(Locale.ENGLISH) + "-installable-")); - assertTrue(comp.toString(2), comp.getString(CommonConstants.JSON_KEY_COMPONENT_NAME) != null); - } - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/BlockedFileOps.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/BlockedFileOps.java deleted file mode 100644 index 592cc95a306e..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/BlockedFileOps.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.FileSystemException; -import java.nio.file.Path; -import java.nio.file.attribute.PosixFilePermission; -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.Callable; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.os.DefaultFileOperations; -import org.graalvm.component.installer.os.WindowsFileOperations; - -/** - * - * @author sdedic - */ -class BlockedFileOps extends WindowsFileOperations { - - class DefDelegate extends DefaultFileOperations { - - @Override - public Path handleUnmodifiableFile(IOException ex, Path p, InputStream content) throws IOException { - return super.handleUnmodifiableFile(ex, p, content); - } - - @Override - public void handleUndeletableFile(IOException ex, Path p) throws IOException { - super.handleUndeletableFile(ex, p); - } - - @Override - public boolean doWithPermissions(Path p, Callable action) throws IOException { - return super.doWithPermissions(p, action); - } - } - - private DefDelegate defSupport; - Set blockedPaths = new HashSet<>(); - Path delayDeletes; - Path copiedFiles; - - @Override - public void init(Feedback feedback) { - super.init(feedback); - defSupport = new DefDelegate(); - defSupport.init(feedback); - } - - @Override - protected void performInstall(Path target, InputStream contents) throws IOException { - if (blockedPaths.contains(target)) { - throw new FileSystemException(""); - } - super.performInstall(target, contents); - } - - @Override - protected void performDelete(Path target) throws IOException { - if (blockedPaths.contains(target)) { - throw new FileSystemException(""); - } - super.performDelete(target); - } - - @Override - public void setPermissions(Path target, Set perms) throws IOException { - if (SystemUtils.isWindows()) { - super.setPermissions(target, perms); - } else { - defSupport.setPermissions(target, perms); - } - } - - @Override - protected boolean doWithPermissions(Path p, Callable action) throws IOException { - if (SystemUtils.isWindows()) { - return super.doWithPermissions(p, action); - } else { - // make it OS-dependent way - return defSupport.doWithPermissions(p, action); - } - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/CatalogInstallTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/CatalogInstallTest.java deleted file mode 100644 index 0ed11b399adc..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/CatalogInstallTest.java +++ /dev/null @@ -1,667 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.net.URL; -import java.net.URLConnection; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.remote.CatalogIterable; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.DependencyException; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.FileIterable; -import org.graalvm.component.installer.IncompatibleException; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.GraalEdition; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import org.graalvm.component.installer.persist.test.Handler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.rules.TestName; - -/** - * - * @author sdedic - */ -public class CatalogInstallTest extends CommandTestBase { - private static final String TEST_CATALOG_URL = "test://release/catalog.properties"; - - @Rule public TestName name = new TestName(); - @Rule public ExpectedException exception = ExpectedException.none(); - @Rule public ProxyResource proxyResource = new ProxyResource(); - - protected InstallCommand inst; - private RemoteCatalogDownloader downloader; - - private void setupVersion(String v) { - String version = v == null ? "0.33" : v; - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, version); - } - - private void setupCatalog(String rel) throws Exception { - String relSpec; - - if (rel == null) { - relSpec = "catalog-" + name.getMethodName() + ".properties"; - if (getClass().getResource(relSpec) == null) { - if (name.getMethodName().contains("Deps")) { - relSpec = "cataloginstallDeps.properties"; - } else { - relSpec = "catalogInstallTest.properties"; - } - } - } else { - relSpec = rel; - } - URL u = getClass().getResource(relSpec); - if (u == null) { - u = getClass().getResource("catalogInstallTest.properties"); - } - Handler.bind(TEST_CATALOG_URL, u); - - downloader = new RemoteCatalogDownloader(this, this, SystemUtils.toURL(TEST_CATALOG_URL)); - this.registry = new CatalogContents(this, downloader.getStorage(), getLocalRegistry()); - } - - private void setupCatalog2(String rel) throws IOException { - Path p = dataFile(rel); - URL u = p.toUri().toURL(); - downloader = new RemoteCatalogDownloader(this, this, u); - this.registry = new CatalogContents(this, downloader.getStorage(), getLocalRegistry()); - } - - /** - * Checks that mismatched catalog is rejected entirely. - * - * @throws Exception - */ - @Test - public void testRejectMismatchingCatalog() throws Exception { - setupVersion("1.0.0-rc1"); - - URL rubyURL = SystemUtils.toURL("test://release/graalvm-ruby.zip"); - Handler.bind(rubyURL.toString(), new URLConnection(rubyURL) { - @Override - public void connect() throws IOException { - throw new UnsupportedOperationException("Should not be touched"); - } - }); - - exception.expect(IncompatibleException.class); - exception.expectMessage("REMOTE_UnsupportedGraalVersion"); - - setupCatalog(null); - textParams.add("ruby"); - paramIterable = new CatalogIterable(this, this); - paramIterable.iterator().next(); - } - - /** - * Checks that mismatched version is rejected based on catalog metadata, and the component URL - * is not opened at all. - * - * Because of versioning support, the "ruby" will not be even identifier as available, as it - * requires an incompatible graalvm version. - */ - @Test - public void testRejectMetaDontDownloadPackage() throws Exception { - setupVersion("0.33-dev"); - - URL rubyURL = SystemUtils.toURL("test://release/graalvm-ruby.zip"); - Handler.bind(rubyURL.toString(), new URLConnection(rubyURL) { - @Override - public void connect() throws IOException { - throw new UnsupportedOperationException( - "Should not be touched"); - } - }); - - exception.expect(DependencyException.Mismatch.class); - exception.expectMessage("VERIFY_ObsoleteGraalVM"); - - setupCatalog(null); - paramIterable = new CatalogIterable(this, this); - textParams.add("ruby"); - InstallCommand cmd = new InstallCommand(); - cmd.init(this, - withBundle(InstallCommand.class)); - cmd.execute(); - } - - @Test - public void testCheckPostinstMessageLoaded() throws Exception { - setupVersion("0.33"); - URL x = getClass().getResource("postinst2.jar"); - URL rubyURL = SystemUtils.toURL("test://release/postinst2.jar"); - Handler.bind(rubyURL.toString(), x); - - setupCatalog(null); - paramIterable = new CatalogIterable(this, this); - textParams.add("ruby"); - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - - cmd.prepareInstallation(); - cmd.completeInstallers(); - - assertFalse(cmd.realInstallers.isEmpty()); - for (Installer i : cmd.realInstallers.values()) { - assertNotNull(i.getComponentInfo().getPostinstMessage()); - } - } - - @Test - public void testPostinstMessagePrinted() throws Exception { - setupVersion("0.33"); - URL x = getClass().getResource("postinst2.jar"); - URL rubyURL = SystemUtils.toURL("test://release/postinst2.jar"); - Handler.bind(rubyURL.toString(), x); - - setupCatalog(null); - paramIterable = new CatalogIterable(this, this); - textParams.add("ruby"); - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - - String[] formatted = new String[1]; - delegateFeedback(new FeedbackAdapter() { - @Override - public boolean verbatimOut(String aMsg, boolean beVerbose) { - if (aMsg.contains("Ruby openssl")) { // NOI18N - formatted[0] = aMsg; - } - return super.verbatimOut(aMsg, beVerbose); - } - }); - cmd.execute(); - - assertNotNull(formatted[0]); - } - - @Test - public void testInstallWithDepsSingleLevel() throws Exception { - setupVersion("19.3-dev"); - setupCatalog(null); - paramIterable = new CatalogIterable(this, this); - textParams.add("r"); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - - List deps = cmd.getDependencies(); - assertEquals(1, deps.size()); - assertEquals("org.graalvm.llvm-toolchain", deps.get(0).createMetaLoader().getComponentInfo().getId()); - } - - @Test - public void testInstallWithIgnoredDeps() throws Exception { - setupVersion("19.3-dev"); - setupCatalog(null); - paramIterable = new CatalogIterable(this, this); - textParams.add("r"); - options.put(Commands.OPTION_NO_DEPENDENCIES, ""); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - - List deps = cmd.getDependencies(); - assertTrue(deps.isEmpty()); - } - - @Test - public void testInstallWithBrokenDeps() throws Exception { - setupVersion("19.3-dev"); - setupCatalog(null); - paramIterable = new CatalogIterable(this, this); - textParams.add("additional"); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - exception.expect(FailedOperationException.class); - exception.expectMessage("INSTALL_UnresolvedDependencies"); - try { - cmd.executeStep(cmd::prepareInstallation, false); - } catch (FailedOperationException ex) { - Set u = cmd.getUnresolvedDependencies(); - assertFalse(u.isEmpty()); - assertEquals("org.graalvm.unknown", u.iterator().next()); - throw ex; - } - } - - @Test - public void testInstallWithBrokenIgnoredDeps() throws Exception { - setupVersion("19.3-dev"); - setupCatalog(null); - paramIterable = new CatalogIterable(this, this); - textParams.add("additional"); - options.put(Commands.OPTION_NO_DEPENDENCIES, ""); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - } - - /** - * Checks that a dependency that is already installed is not installed again. - */ - @Test - public void testInstallDepsWithDependecnyInstalled() throws Exception { - setupVersion("19.3-dev"); - setupCatalog(null); - testInstallDepsWithDependecnyInstalledCommon(); - } - - private void testInstallDepsWithDependecnyInstalledCommon() throws Exception { - ComponentInfo fakeInfo = new ComponentInfo("org.graalvm.llvm-toolchain", "Fake Toolchain", "19.3-dev"); - fakeInfo.setInfoPath(""); - storage.installed.add(fakeInfo); - - paramIterable = new CatalogIterable(this, this); - textParams.add("r"); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - assertTrue(cmd.getDependencies().isEmpty()); - } - - /** - * Checks that if a dependency is specified also on the commandline, the component is actually - * installed just once. - */ - @Test - public void testInstallDepsOnCommandLine() throws Exception { - setupVersion("19.3-dev"); - setupCatalog2("cataloginstallDeps.properties"); - testInstallDepsOnCommandLineCommon(); - } - - private void testInstallDepsOnCommandLineCommon() throws Exception { - paramIterable = new CatalogIterable(this, this); - textParams.add("r"); - textParams.add("llvm-toolchain"); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - cmd.executeStep(cmd::completeInstallers, false); - - List instSequence = cmd.getInstallers(); - assertEquals(2, instSequence.size()); - ComponentInfo ci = instSequence.get(0).getComponentInfo(); - assertEquals("org.graalvm.llvm-toolchain", ci.getId()); - ci = instSequence.get(1).getComponentInfo(); - assertEquals("org.graalvm.r", ci.getId()); - } - - /** - * Checks that if a dependency is specified also on the commandline, the component is actually - * installed just once. In this case, the catalog does NOT specify dependencies, they are - * discovered only when the component's archive is loaded. - */ - @Test - public void testInstallDepsOnCommandLine2() throws Exception { - setupVersion("19.3-dev"); - setupCatalog2("cataloginstallDeps2.properties"); - testInstallDepsOnCommandLineCommon(); - } - - /** - * Checks that dependencies precede the component that uses them. In this case ruby > - * native-image > llvm-toolchain, so they should be installed in the opposite order. - */ - @Test - public void testDepsBeforeUsage() throws Exception { - setupVersion("19.3-dev"); - setupCatalog2("cataloginstallDeps.properties"); - testDepsBeforeUsageCommon(); - } - - /** - * The same as {@link #testDepsBeforeUsage()} except that dependency info is incomplete in the - * catalog. - * - * @throws Exception - */ - @Test - public void testDepsBeforeUsage2() throws Exception { - setupVersion("19.3-dev"); - setupCatalog2("cataloginstallDeps2.properties"); - testDepsBeforeUsageCommon(); - } - - private void testDepsBeforeUsageCommon() throws Exception { - paramIterable = new CatalogIterable(this, this); - textParams.add("ruby"); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - cmd.executeStep(cmd::completeInstallers, false); - - List instSequence = cmd.getInstallers(); - assertEquals(3, instSequence.size()); - ComponentInfo ci = instSequence.get(0).getComponentInfo(); - assertEquals("org.graalvm.llvm-toolchain", ci.getId()); - ci = instSequence.get(1).getComponentInfo(); - assertEquals("org.graalvm.native-image", ci.getId()); - ci = instSequence.get(2).getComponentInfo(); - assertEquals("org.graalvm.ruby", ci.getId()); - } - - /** - * Checks that two same components on the commandline are merged, including their dependencies. - */ - @Test - public void testTwoSameComponentsCommandLineDeps() throws Exception { - setupVersion("19.3-dev"); - setupCatalog2("cataloginstallDeps.properties"); - testTwoSameComponentsCommandLineDepsCommon(); - } - - /** - * Checks that two same components on the commandline are merged, including their dependencies. - */ - @Test - public void testTwoSameComponentsCommandLineDeps2() throws Exception { - setupVersion("19.3-dev"); - setupCatalog2("cataloginstallDeps2.properties"); - testTwoSameComponentsCommandLineDepsCommon(); - } - - private void testTwoSameComponentsCommandLineDepsCommon() throws Exception { - paramIterable = new CatalogIterable(this, this); - textParams.add("r"); - textParams.add("r"); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - cmd.executeStep(cmd::completeInstallers, false); - - List instSequence = cmd.getInstallers(); - assertEquals(2, instSequence.size()); - ComponentInfo ci = instSequence.get(0).getComponentInfo(); - assertEquals("org.graalvm.llvm-toolchain", ci.getId()); - ci = instSequence.get(1).getComponentInfo(); - assertEquals("org.graalvm.r", ci.getId()); - } - - CatalogFactory catalogFactory = null; - - @Override - public CatalogFactory getCatalogFactory() { - if (catalogFactory == null) { - return super.getCatalogFactory(); - } else { - return catalogFactory; - } - } - - /** - * Checks that dependencies can be loaded from the same directory as the installed Component. - */ - @Test - public void testInstallDependencyFromSameDirectory() throws Exception { - Path ruby193Source = dataFile("../repo/19.3.0.0/r"); - Path llvm193Source = dataFile("../repo/19.3.0.0/llvm-toolchain"); - - // they should be next to eah other - assertEquals(ruby193Source.getParent(), llvm193Source.getParent()); - files.add(ruby193Source.toFile()); - setupVersion("19.3.0.0"); - // no external catalog - downloader = new RemoteCatalogDownloader(this, this, (URL) null); - downloader.addLocalChannelSource( - new SoftwareChannelSource(ruby193Source.getParent().toFile().toURI().toString())); - catalogFactory = new CatalogFactory() { - @Override - public ComponentCatalog createComponentCatalog(CommandInput input) { - return new CatalogContents(CatalogInstallTest.this, downloader.getStorage(), input.getLocalRegistry()); - } - - @Override - public List listEditions(ComponentRegistry targetGraalVM) { - return Collections.emptyList(); - } - }; - FileIterable fit = new FileIterable(this, this); - fit.setCatalogFactory(catalogFactory); - paramIterable = fit; - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - assertFalse(cmd.getDependencies().isEmpty()); - } - - /** - * Tests, that a correct java version flavour gets selected if the catalog contains two flavours - * of the component in the requested version. - */ - @Test - public void testInstallCorrectJavaVersion8() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_JAVA_VERSION, "8"); - setupVersion("1.0.0.0"); - setupCatalog("catalogMultiFlavours.properties"); - - paramIterable = new CatalogIterable(this, this); - textParams.add("ruby"); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - List installers = cmd.getInstallers(); - assertEquals(1, installers.size()); - } - - @Test - public void testInstallCorrectJavaVersion11() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_JAVA_VERSION, "11"); - setupVersion("1.0.0.0"); - setupCatalog("catalogMultiFlavours.properties"); - - paramIterable = new CatalogIterable(this, this); - textParams.add("ruby"); - - InstallCommand cmd = new InstallCommand(); - cmd.init(this, withBundle(InstallCommand.class)); - cmd.executionInit(); - - cmd.executeStep(cmd::prepareInstallation, false); - List installers = cmd.getInstallers(); - assertEquals(1, installers.size()); - } - - /** - * Version 20.3.0 should not accept 20.3.1 (20.3.1.2, 20.3.1.3, ...) components. - * - * @throws Exception - */ - @Test - public void testRejectNewerInstallVersion() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "20.3.0"); - setupCatalog("data/catalog21patch.properties"); - - textParams.add("llvm-toolchain"); - - paramIterable = new CatalogIterable(this, this); - Iterator params = paramIterable.iterator(); - assertTrue(params.hasNext()); - ComponentParam toolchainParam = params.next(); - ComponentInfo toolchainInfo = toolchainParam.createMetaLoader().getComponentInfo(); - assertNotNull(toolchainInfo); - assertEquals("org.graalvm.llvm-toolchain", toolchainInfo.getId()); - assertEquals("Only release is compatible", "20.3.0", toolchainInfo.getVersion().displayString()); - } - - /** - * Checks that all installable versions are collected. - * - * @throws Exception - */ - @Test - public void testCollectAllVersions() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "20.3.0"); - setupCatalog("data/catalog21patch.properties"); - - Collection infos = registry.loadComponents("ruby", localRegistry.getGraalVersion().match(Version.Match.Type.INSTALLABLE), false); - assertEquals("3 version equal or greater", 3, infos.size()); - - infos = registry.loadComponents("ruby", localRegistry.getGraalVersion().match(Version.Match.Type.COMPATIBLE), false); - assertEquals("Just 1 version", 1, infos.size()); - - infos = registry.loadComponents("llvm-toolchain", localRegistry.getGraalVersion().match(Version.Match.Type.INSTALLABLE), false); - assertEquals("3 version equal or greater", 4, infos.size()); - } - - @Test - public void testAcceptsNewerPatchInstallVersion() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "21.0.0.0"); - setupCatalog("data/catalog21patch.properties"); - - textParams.add("ruby"); - textParams.add("python"); - - Collection infos = registry.loadComponents("ruby", localRegistry.getGraalVersion().match(Version.Match.Type.COMPATIBLE), false); - assertEquals("Release and patch ruby available", 2, infos.size()); - - paramIterable = new CatalogIterable(this, this); - Iterator params = paramIterable.iterator(); - assertTrue(params.hasNext()); - ComponentParam rubyParam = params.next(); - ComponentInfo rubyInfo = rubyParam.createMetaLoader().getComponentInfo(); - assertNotNull(rubyInfo); - assertEquals("org.graalvm.ruby", rubyInfo.getId()); - assertEquals("Only release is compatible", "21.0.0", rubyInfo.getVersion().displayString()); - - ComponentParam pythonParam = params.next(); - ComponentInfo pythonInfo = pythonParam.createMetaLoader().getComponentInfo(); - assertNotNull(pythonInfo); - assertEquals("org.graalvm.python", pythonInfo.getId()); - assertEquals("Patch can be installed", "21.0.0.2", pythonInfo.getVersion().displayString()); - } - - /** - * Checks that 20.3.1.1 will not downgrade to 20.3.1.0. - * - * @throws Exception - */ - @Test - public void testWillNotDowngradePatch() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "20.3.1.2"); - setupCatalog("data/catalog21patch.properties"); - - Collection infos; - infos = registry.loadComponents("llvm-toolchain", localRegistry.getGraalVersion().match(Version.Match.Type.INSTALLABLE), false); - assertEquals("4 version equal or greater", 4, infos.size()); - - infos = registry.loadComponents("llvm-toolchain", localRegistry.getGraalVersion().match(Version.Match.Type.COMPATIBLE), false); - assertEquals("2 version patch-compatible", 2, infos.size()); - } - - private static ComponentInfo findVersion(Collection versions, String vString) { - Version ver = Version.fromString(vString); - return versions.stream().filter( - c -> c.getVersion().equals(ver)).findFirst().orElse(null); - } - - /** - * Checks that older versions are acceptable. - * - * @throws Exception - */ - @Test - public void testAcceptCompatibleOlders() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "21.0.0.2"); - setupCatalog("data/catalog21patch.properties"); - - Collection infos; - - infos = registry.loadComponents("r", localRegistry.getGraalVersion().match(Version.Match.Type.INSTALLABLE), false); - assertEquals("1 older version ", 1, infos.size()); - assertEquals("21.0.0", infos.iterator().next().getVersion().displayString()); - - infos = registry.loadComponents("python", localRegistry.getGraalVersion().match(Version.Match.Type.INSTALLABLE), false); - assertEquals("2 older and current versions ", 2, infos.size()); - assertNotNull("21.0.0.2 present", findVersion(infos, "21.0.0.2")); - assertNotNull("21.0.0.0 present", findVersion(infos, "21.0.0.0")); - - textParams.add("python"); - - paramIterable = new CatalogIterable(this, this); - Iterator params = paramIterable.iterator(); - - ComponentParam pythonParam = params.next(); - ComponentInfo pythonInfo = pythonParam.createMetaLoader().getComponentInfo(); - assertNotNull(pythonInfo); - assertEquals("Current version offered", "21.0.0.2", pythonInfo.getVersion().toString()); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InfoTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InfoTest.java deleted file mode 100644 index ab75df82040e..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InfoTest.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.List; -import java.util.Locale; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENTS; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_REQUIRES; -import org.graalvm.component.installer.DownloadURLIterable; -import org.graalvm.component.installer.MemoryFeedback; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.remote.CatalogIterable; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.graalvm.shadowed.org.json.JSONArray; -import org.graalvm.shadowed.org.json.JSONObject; -import org.graalvm.shadowed.org.json.JSONTokener; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class InfoTest extends CommandTestBase { - @Rule public final ProxyResource proxyResource = new ProxyResource(); - - private static final String GVM_VERSION = "1.0.0"; - private static final String STABILITY = "ComponentStabilityLevel_undefined"; - - private Version initVersion(String s) throws IOException { - Version v = Version.fromString(s); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, v.toString()); - Path catalogPath = dataFile("../repo/catalog.properties"); - RemoteCatalogDownloader downloader = new RemoteCatalogDownloader( - this, - this, - catalogPath.toUri().toURL()); - - registry = new CatalogContents(this, downloader.getStorage(), localRegistry); - paramIterable = new CatalogIterable(this, this); - return v; - } - - @Test - public void testInfoLocalComponent() throws Exception { - Path p = dataFile("truffleruby2.jar"); - textParams.add(p.toString()); - p = dataFile("../repo/python/1.0.0.0"); - textParams.add(p.toString()); - - InfoCommand cmd = new InfoCommand(); - cmd.init(this, this.withBundle(InfoCommand.class)); - cmd.collectComponents(); - - List comps = cmd.getComponents(); - assertEquals(2, comps.size()); - ComponentInfo ruby = comps.get(0); - assertEquals("org.graalvm.ruby", ruby.getId()); - ruby.getVersion().toString(); - assertEquals("1.0", ruby.getVersion().originalString()); - - ComponentInfo python = comps.get(1); - assertEquals("org.graalvm.python", python.getId()); - assertEquals("1.0.0.0", python.getVersion().originalString()); - } - - @Test - public void testInfoDownloadedComponent() throws Exception { - Path p = dataFile("truffleruby2.jar"); - options.put(Commands.OPTION_URLS, ""); - textParams.add(p.toUri().toString()); - - paramIterable = new DownloadURLIterable(this, this); - InfoCommand cmd = new InfoCommand(); - cmd.init(this, this.withBundle(InfoCommand.class)); - cmd.collectComponents(); - - List comps = cmd.getComponents(); - assertEquals(1, comps.size()); - ComponentInfo ruby = comps.get(0); - assertEquals("org.graalvm.ruby", ruby.getId()); - ruby.getVersion().toString(); - assertEquals("1.0", ruby.getVersion().originalString()); - } - - @Test - public void testInfoCompatibleComponents() throws Exception { - initVersion(GVM_VERSION); - - textParams.add("ruby"); - textParams.add("python"); - - InfoCommand cmd = new InfoCommand(); - cmd.init(this, this.withBundle(InfoCommand.class)); - cmd.collectComponents(); - - List comps = cmd.getComponents(); - assertEquals(2, comps.size()); - } - - @Test - public void testIncompatibleComponentInfo() throws Exception { - initVersion(GVM_VERSION); - - textParams.add("r"); - - InfoCommand cmd = new InfoCommand(); - cmd.init(this, this.withBundle(InfoCommand.class)); - cmd.collectComponents(); - - List comps = cmd.getComponents(); - assertEquals(1, comps.size()); - } - - @Test - public void testSpecificVersionInfo() throws Exception { - initVersion(GVM_VERSION); - - textParams.add("ruby=1.0.1.1"); - InfoCommand cmd = new InfoCommand(); - cmd.init(this, this.withBundle(InfoCommand.class)); - cmd.collectComponents(); - - List comps = cmd.getComponents(); - assertEquals(1, comps.size()); - - } - - @Test - public void testJSONOutput() throws Exception { - options.put(Commands.OPTION_JSON_OUTPUT, ""); - MemoryFeedback mf = new MemoryFeedback(); - this.delegateFeedback(mf); - initVersion(GVM_VERSION); - - textParams.add("ruby"); - textParams.add("python"); - - InfoCommand cmd = new InfoCommand(); - cmd.init(this, this.withBundle(InfoCommand.class)); - cmd.collectComponents(); - cmd.printComponents(); - - for (MemoryFeedback.Memory mem : mf) { - if (!mem.silent) { - JSONObject jo = new JSONObject(new JSONTokener(mem.key)); - JSONArray comps = jo.getJSONArray(JSON_KEY_COMPONENTS); - assertEquals(2, comps.length()); - for (int i = 0; i < comps.length(); ++i) { - JSONObject comp = comps.getJSONObject(i); - assertEquals(comp.toString(2), GVM_VERSION, comp.getString(CommonConstants.JSON_KEY_COMPONENT_GRAALVM)); - assertEquals(comp.toString(2), GVM_VERSION, comp.getString(CommonConstants.JSON_KEY_COMPONENT_VERSION)); - assertEquals(comp.toString(2), STABILITY, comp.getString(CommonConstants.JSON_KEY_COMPONENT_STABILITY)); - assertEquals(comp.toString(2), comp.getString(CommonConstants.JSON_KEY_COMPONENT_ORIGIN), comp.getString(CommonConstants.JSON_KEY_COMPONENT_FILENAME)); - assertTrue(comp.toString(2), comp.getString(CommonConstants.JSON_KEY_COMPONENT_ORIGIN).contains(comp.getString(CommonConstants.JSON_KEY_COMPONENT_ID).toLowerCase(Locale.ENGLISH))); - assertTrue(comp.toString(2), comp.getString(CommonConstants.JSON_KEY_COMPONENT_NAME) != null); - JSONObject req = comp.getJSONObject(JSON_KEY_COMPONENT_REQUIRES); - JSONArray reqNames = req.names(); - assertEquals(2, reqNames.length()); - for (int u = 0; u < reqNames.length(); ++u) { - String name = reqNames.getString(u); - assertEquals(comp.toString(2), storage.graalInfo.get(name), req.getString(name)); - } - } - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallTest.java deleted file mode 100644 index efb508ba8875..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallTest.java +++ /dev/null @@ -1,460 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.File; -import org.graalvm.component.installer.CommandTestBase; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.LinkOption; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.graalvm.component.installer.remote.CatalogIterable; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentIterable; -import org.graalvm.component.installer.DependencyException; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import org.graalvm.component.installer.persist.test.Handler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; - -public class InstallTest extends CommandTestBase { - @Rule public final ProxyResource proxyResource = new ProxyResource(); - - InstallCommand inst; - - @Before - @Override - public void setUp() throws Exception { - super.setUp(); - files.add(dataFile("truffleruby2.jar").toFile()); - } - - @Test - public void testHelp() throws Exception { - class F extends FeedbackAdapter { - List outputKeys = new ArrayList<>(); - - @Override - public void output(String bundleKey, Object... params) { - outputKeys.add(bundleKey); - } - } - - F fe = new F(); - delegateFeedback(fe); - options.put(Commands.OPTION_HELP, ""); - - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - assertFalse(Files.list(targetPath).findFirst().isPresent()); - assertTrue(fe.outputKeys.get(0).toLowerCase().contains("help")); - } - - @Test - public void testDryRunInstall() throws IOException { - options.put(Commands.OPTION_DRY_RUN, ""); - - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - - assertFalse(Files.list(targetPath).findFirst().isPresent()); - } - - @Test - public void testValidateInstallFail() throws IOException { - options.put(Commands.OPTION_VALIDATE, ""); - - files.add(dataFile("truffleruby-i386.zip").toFile()); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - try { - inst.execute(); - fail("The second component should fail dependencies"); - } catch (DependencyException ex) { - // failed install - } - assertFalse(Files.list(targetPath).findFirst().isPresent()); - } - - private String errorKey; - private String msg; - - @Test - public void testIgnoreFailedInstall() throws IOException { - options.put(Commands.OPTION_VALIDATE, ""); - - files.add(dataFile("truffleruby-i386.zip").toFile()); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.setIgnoreFailures(true); - - delegateFeedback(new FeedbackAdapter() { - @Override - public void error(String key, Throwable t, Object... params) { - errorKey = key; - msg = t.getMessage(); - } - - }); - - inst.execute(); - assertFalse(Files.list(targetPath).findFirst().isPresent()); - assertEquals("VERIFY_Dependency_Failed", msg); - assertEquals("INSTALL_IgnoreFailedInstallation2", errorKey); - - } - - @Test - public void testDryRunForce() throws IOException { - options.put(Commands.OPTION_DRY_RUN, ""); - options.put(Commands.OPTION_FORCE, ""); - - files.add(dataFile("truffleruby-i386.zip").toFile()); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - assertFalse(Files.list(targetPath).findFirst().isPresent()); - } - - @Test - public void testValidateInstall() throws IOException { - options.put(Commands.OPTION_VALIDATE, ""); - - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - assertFalse(Files.list(targetPath).findFirst().isPresent()); - } - - @Test - public void testFailOnExistingComponent() throws IOException { - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - - options.put(Commands.OPTION_FAIL_EXISTING, ""); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - files.add(dataFile("truffleruby3.jar").toFile()); - - exception.expect(DependencyException.class); - exception.expectMessage("VERIFY_ComponentExists"); - inst.execute(); - } - - @Test - public void testSkipExistingComponent() throws IOException { - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - - File f = new File(folder.getRoot(), "inst"); - // bin/ruby is a symlink, which is skipped on Windows; so test the link's target: - File binRuby = SystemUtils.resolveRelative(f.toPath(), "jre/bin/ruby").toFile(); - assertTrue("Ruby must be installed", binRuby.exists()); - - Files.walk(f.toPath()).forEach((p) -> { - try { - if (!p.equals(f.toPath()) && Files.isRegularFile(p, LinkOption.NOFOLLOW_LINKS)) { - Files.delete(p); - } - } catch (IOException ex) { - Logger.getLogger(InstallTest.class.getName()).log(Level.SEVERE, null, ex); - } - }); - - assertFalse("Ruby must be deleted", binRuby.exists()); - - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - files.add(dataFile("truffleruby3.jar").toFile()); - inst.execute(); - assertFalse("Component must not be processed", binRuby.exists()); - } - - ComponentIterable componentIterable; - - @Override - public ComponentIterable existingFiles() throws FailedOperationException { - if (componentIterable != null) { - return componentIterable; - } - return super.existingFiles(); - } - - @Test - public void testFailOnExistingFromCatalog() throws Exception { - ComponentInfo fakeInfo = new ComponentInfo("ruby", "Fake ruby", "1.0"); - storage.installed.add(fakeInfo); - - URL u = SystemUtils.toURL("test://graalvm.io/download/catalog"); - URL u2 = SystemUtils.toURL(u, "graalvm-ruby.zip"); - - Handler.bind(u.toString(), getClass().getResource("catalog")); - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.33-dev"); - initCatalogIterable(u); - textParams.add("ruby"); - options.put(Commands.OPTION_FAIL_EXISTING, ""); - files.clear(); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - try { - inst.execute(); - } catch (DependencyException.Conflict ex) { - assertEquals("VERIFY_ComponentExists", ex.getMessage()); - } - - assertFalse(Handler.isVisited(u2)); - } - - private void initCatalogIterable(URL u) { - RemoteCatalogDownloader rcd = new RemoteCatalogDownloader( - this, - this, - u); - - registry = new CatalogContents(this, rcd.getStorage(), localRegistry); - componentIterable = new CatalogIterable(this, this); - } - - @Test - public void testSkipExistingFromCatalog() throws Exception { - ComponentInfo fakeInfo = new ComponentInfo("ruby", "Fake ruby", "1.0"); - storage.installed.add(fakeInfo); - - URL u = SystemUtils.toURL("test://graalvm.io/download/catalog"); - URL u2 = SystemUtils.toURL(u, "graalvm-ruby.zip"); - - Handler.bind(u.toString(), getClass().getResource("catalog")); - Handler.bind(u2.toString(), getClass().getResource("graalvm-ruby.zip")); - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.33-dev"); - initCatalogIterable(u); - textParams.add("ruby"); - files.clear(); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - try { - inst.execute(); - } catch (DependencyException.Conflict ex) { - fail("Should not raise an error"); - } - - assertFalse("Should not touch the remote file", Handler.isVisited(u2)); - } - - @Test - public void testReplaceExistingComponent() throws IOException { - options.put(Commands.OPTION_REPLACE_COMPONENTS, ""); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - files.add(dataFile("truffleruby3.jar").toFile()); - - inst.execute(); - } - - @Test - public void testFailInstallCleanup() throws IOException { - Path offending = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - Files.createDirectories(offending.getParent()); - Files.createFile(offending); - - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - try { - inst.execute(); - fail("Exception expected"); - } catch (IOException | FailedOperationException ex) { - // OK - } - Files.delete(offending); - Files.delete(offending.getParent()); // jre/bin - Files.delete(offending.getParent().getParent()); // jre - assertFalse(Files.list(targetPath).findFirst().isPresent()); - } - - @Test - public void testPostinstMessagePrinted() throws Exception { - AtomicBoolean printed = new AtomicBoolean(); - delegateFeedback(new FeedbackAdapter() { - @Override - public boolean verbatimOut(String aMsg, boolean beVerbose) { - if ("Postinst".equals(aMsg)) { - printed.set(true); - } - return super.verbatimOut(aMsg, beVerbose); - } - }); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - assertTrue("Postinst message must be printed", printed.get()); - } - - /** - * The exact message contents. Whitespaces are important, incl. newlines. - */ - private static final String GOLDEN_MESSAGE = "\n" + - "IMPORTANT NOTE:\n" + - "---------------\n" + - "The Ruby openssl C extension needs to be recompiled on your system to work with the installed libssl.\n" + - "Make sure headers for libssl are installed, see https://github.com/oracle/truffleruby/blob/master/doc/user/installing-libssl.md for details.\n" + - "Then run the following command:\n" + - " ${graalvm_home}/jre/languages/ruby/lib/truffle/post_install_hook.sh\n"; // exactly - // 6 - // spaces - // at - // the - // beginning - - @Test - public void testPostinstMessageFormat() throws Exception { - String[] formatted = new String[1]; - files.set(0, dataFile("postinst.jar").toFile()); - delegateFeedback(new FeedbackAdapter() { - @Override - public boolean verbatimOut(String aMsg, boolean beVerbose) { - if (aMsg.contains("Ruby openssl")) { // NOI18N - formatted[0] = aMsg; - } - return super.verbatimOut(aMsg, beVerbose); - } - }); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - assertNotNull("Postinst message must be printed", formatted[0]); - - String check = GOLDEN_MESSAGE.replace("${graalvm_home}", getGraalHomePath().toString()); - assertEquals(check, formatted[0]); - } - - /** - * Installs an a missing component from the same distribution. - * - * @throws Exception - */ - @Test - public void testInstallMissingComponent() throws Exception { - ComponentInfo fakeInfo = new ComponentInfo("ruby", "Fake ruby", "1.0"); - storage.installed.add(fakeInfo); - - } - - @Test - public void testRefuseNonAdminInstall() throws Exception { - options.put(Commands.OPTION_DRY_RUN, ""); - - storage.writableUser = "hero"; // NOI18N - - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - exception.expect(FailedOperationException.class); - exception.expectMessage("ADMIN"); - - inst.execute(); - } - - private static final String BLOCKED_CONTENT = "This is a blocked file"; // NOI18N - private static final String INSTALL_CONTENT = "#!/usr/bin/env bash"; // NOI18N - - /** - * Checks that in the 'replace' scenario, the locked file is first scheduled for delete and then - * the new version for copy/moe to the original place. - */ - @Test - public void testReplaceExistingComponentWithLockedFiles() throws IOException { - options.put(Commands.OPTION_REPLACE_COMPONENTS, ""); - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - - inst.execute(); - - Path blockedFile = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby/bin/rake")); - Path copyDir = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby/bin.new")); - Path copyFile = copyDir.resolve("rake"); - - Files.write(blockedFile, Collections.singletonList(BLOCKED_CONTENT)); - - BlockedFileOps blockedOps = new BlockedFileOps(); - fileOps = blockedOps; - fileOps.init(this); - fileOps.setRootPath(targetPath); - - blockedOps.blockedPaths.add(blockedFile); - Path delayDeletes = folder.newFile("delayDeletes").toPath(); - Path copiedFiles = folder.newFile("copiedDirs").toPath(); - blockedOps.setDelayDeletedList(delayDeletes); - blockedOps.setCopyContents(copiedFiles); - - inst = new InstallCommand(); - inst.init(this, withBundle(InstallCommand.class)); - files.add(dataFile("truffleruby3.jar").toFile()); - - inst.execute(); - - // check that the original blocked file was not replaced: - assertEquals(BLOCKED_CONTENT, Files.readAllLines(blockedFile).get(0)); - assertEquals(INSTALL_CONTENT, Files.readAllLines(copyFile).get(0)); - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallVersionsTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallVersionsTest.java deleted file mode 100644 index a005cab2696b..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallVersionsTest.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.DependencyException; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.remote.CatalogIterable; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import static org.junit.Assert.assertEquals; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class InstallVersionsTest extends CommandTestBase { - @Rule public final ProxyResource proxyResource = new ProxyResource(); - - private InstallCommand cmd; - - private List installInfos = new ArrayList<>(); - private List installParams = new ArrayList<>(); - - @Before - @Override - public void setUp() throws Exception { - super.setUp(); - - cmd = new InstallCommand() { - @Override - Installer createInstaller(ComponentParam p, MetadataLoader ldr) throws IOException { - installInfos.add(ldr.getComponentInfo()); - installParams.add(p); - Installer override = overrideCreateInstaller(p, ldr); - if (override == null) { - return super.createInstaller(p, ldr); - } else { - configureInstaller(override); - return override; - } - } - }; - cmd.init(this, withBundle(InstallCommand.class)); - } - - @SuppressWarnings("unused") - protected Installer overrideCreateInstaller(ComponentParam p, MetadataLoader ldr) throws IOException { - ComponentInfo partialInfo; - partialInfo = ldr.getComponentInfo(); - ldr.loadPaths(); - Archive a = null; - Installer inst = new Installer(this, getFileOperations(), partialInfo, getLocalRegistry(), - getRegistry(), a); - inst.setPermissions(ldr.loadPermissions()); - inst.setSymlinks(ldr.loadSymlinks()); - return inst; - - } - - private Version initVersion(String s) throws IOException { - Version v = Version.fromString(s); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, s); - Path catalogPath = dataFile("../repo/catalog.properties"); - RemoteCatalogDownloader downloader = new RemoteCatalogDownloader( - this, - this, - catalogPath.toUri().toURL()); - - registry = new CatalogContents(this, downloader.getStorage(), localRegistry); - paramIterable = new CatalogIterable(this, this); - return v; - } - - /** - * Installs a missing component from the same distribution. - */ - @Test - public void testMissingComponent() throws Exception { - initVersion("1.0.1.0"); - - textParams.add("python"); - cmd.prepareInstallation(); - assertEquals(1, installInfos.size()); - ComponentInfo ci = installInfos.get(0); - assertEquals("1.0.1.0", ci.getVersion().toString()); - } - - /** - * Installs a new component, but updated one, from a newer distribution. - */ - @Test - public void testInstallNewUpdatedComponent() throws Exception { - initVersion("1.0.1.0"); - - textParams.add("ruby"); - cmd.prepareInstallation(); - assertEquals(1, installInfos.size()); - ComponentInfo ci = installInfos.get(0); - assertEquals("1.0.1.1", ci.getVersion().toString()); - } - - /** - * Refuses to upgrade the core distribution. - */ - @Test - public void testRefuseCoreUpgrade() throws Exception { - initVersion("1.0.0.0"); - - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_UpgradeGraalVMCore"); - textParams.add("r"); - cmd.prepareInstallation(); - } - - @Test - public void testUnknownComponent() throws Exception { - initVersion("1.0.0.0"); - - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_UnknownComponentId"); - textParams.add("x"); - cmd.prepareInstallation(); - } - - @Test - public void testRefusedDowngrade() throws Exception { - initVersion("1.1.0.0"); - - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_UnknownComponentId"); - textParams.add("ruby"); - cmd.prepareInstallation(); - } - - @Test - public void testDowngradeToSpecificVersion() throws Exception { - initVersion("1.1.0.0"); - - exception.expect(FailedOperationException.class); - // catalogs do not even load obsolete versions - exception.expectMessage("REMOTE_UnknownComponentId"); - textParams.add("ruby=1.0.0.0"); - cmd.prepareInstallation(); - } - - @Test - public void testRefuseExplicitUpgrade() throws Exception { - initVersion("1.0.1.0"); - - exception.expect(DependencyException.Mismatch.class); - exception.expectMessage("VERIFY_UpdateGraalVM"); - textParams.add("python=1.1.0.0"); - cmd.prepareInstallation(); - } - - @Test - public void testFailOneOfComponents() throws Exception { - initVersion("1.0.1.0"); - textParams.add("ruby"); - textParams.add("python=1.1.0.0"); - exception.expect(DependencyException.Mismatch.class); - exception.expectMessage("VERIFY_UpdateGraalVM"); - cmd.prepareInstallation(); - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallerTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallerTest.java deleted file mode 100644 index fab5c1947a49..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/InstallerTest.java +++ /dev/null @@ -1,1036 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.io.File; -import java.io.IOException; -import java.nio.file.DirectoryNotEmptyException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.PosixFilePermissions; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; -import java.util.jar.JarFile; - -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.DependencyException; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileOperations; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.jar.JarArchive; -import org.graalvm.component.installer.jar.JarMetaLoader; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.os.DefaultFileOperations; -import org.graalvm.component.installer.os.WindowsFileOperations; -import org.graalvm.component.installer.persist.ComponentPackageLoader; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.rules.TemporaryFolder; - -public class InstallerTest extends TestBase { - @Rule public ExpectedException exception = ExpectedException.none(); - protected JarArchive componentJarFile; - @Rule public TemporaryFolder folder = new TemporaryFolder(); - - private Path targetPath; - - private MockStorage storage; - private ComponentRegistry registry; - private ComponentPackageLoader loader; - private Installer installer; - private ComponentInfo componentInfo; - - protected FileOperations fileOps; - - private void setupComponentInstall(String relativePath) throws IOException { - File f = dataFile(relativePath).toFile(); - JarFile jf = new JarFile(f); - - loader = new JarMetaLoader(jf, this); - componentInfo = loader.createComponentInfo(); - - componentJarFile = new JarArchive(jf); - - loader.loadPaths(); - installer = new Installer(fb(), fileOps, componentInfo, registry, registry, componentJarFile); - installer.setInstallPath(targetPath); - installer.setLicenseRelativePath(SystemUtils.fromCommonRelative(loader.getLicensePath())); - } - - private Feedback fb() { - return withBundle(Installer.class); - } - - public InstallerTest() { - } - - @BeforeClass - public static void setUpClass() { - } - - @AfterClass - public static void tearDownClass() { - } - - @Before - public void setUp() throws IOException { - targetPath = folder.newFolder("inst").toPath(); - storage = new MockStorage(); - registry = new ComponentRegistry(this, storage); - fileOps = SystemUtils.isWindows() ? new WindowsFileOperations() : new DefaultFileOperations(); - fileOps.init(this); - fileOps.setRootPath(targetPath); - } - - @After - public void tearDown() throws Exception { - if (componentJarFile != null) { - componentJarFile.close(); - } - } - - @Test - public void testFailRemoteComponentExisting() throws IOException { - setupComponentInstall("truffleruby2.jar"); - ComponentInfo fakeInfo = new ComponentInfo("org.graalvm.ruby", "Fake ruby", "1.0"); - storage.installed.add(fakeInfo); - exception.expect(DependencyException.Conflict.class); - exception.expectMessage("VERIFY_ComponentExists"); - installer.setFailOnExisting(true); - installer.validateRequirements(); - } - - /** - * Checks that the component will be uninstalled before installing a new one. - * - * Disabled; the uninstall logic is now implemented by InstallCommand and tested by InstallTest. - * - * @Test public void testSetReplaceComponents() throws IOException { - * setupComponentInstall("truffleruby2.jar"); ComponentInfo fakeInfo = new - * ComponentInfo("org.graalvm.ruby", "Fake ruby", "0.32"); - * storage.installed.add(fakeInfo); - * - * installer.setReplaceComponents(true); installer.validateRequirements(); - * installer.install(); } - */ - - @Test - public void testFailOnExistingComponent() throws IOException { - setupComponentInstall("truffleruby2.jar"); - // the version has to be the same as the installed component, or newer so that installer - // will not attempt to replace it. - ComponentInfo fakeInfo = new ComponentInfo("org.graalvm.ruby", "Fake ruby", "1.1"); - storage.installed.add(fakeInfo); - - exception.expect(DependencyException.Conflict.class); - exception.expectMessage("VERIFY_ComponentExists"); - installer.setFailOnExisting(true); - installer.validateRequirements(); - } - - @Test - public void testDontFailOnComponentUpdate() throws IOException { - setupComponentInstall("truffleruby2.jar"); - // the version has to be the same as the installed component, or newer so that installer - // will not attempt to replace it. - ComponentInfo fakeInfo = new ComponentInfo("org.graalvm.ruby", "Fake ruby", "0.99"); - storage.installed.add(fakeInfo); - - installer.setFailOnExisting(true); - installer.validateRequirements(); - } - - @Test - public void testSkipExistingComponent() throws IOException { - setupComponentInstall("truffleruby2.jar"); - ComponentInfo fakeInfo = new ComponentInfo("org.graalvm.ruby", "Fake ruby", "1.0"); - storage.installed.add(fakeInfo); - - installer.setFailOnExisting(false); - assertFalse("Must refuse installation", installer.validateAll()); - } - - @Test - public void testAcceptComponentUpgrade() throws IOException { - setupComponentInstall("truffleruby2.jar"); - ComponentInfo fakeInfo = new ComponentInfo("org.graalvm.ruby", "Fake ruby", "0.32"); - storage.installed.add(fakeInfo); - - installer.setFailOnExisting(false); - assertTrue("Must refuse installation", installer.validateAll()); - } - - /** - * Test of uninstall method, of class Installer. - */ - @Test - public void testUninstall() throws Exception { - setupComponentInstall("truffleruby2.jar"); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - // install - installer.install(); - - ComponentInfo savedInfo = installer.getComponentInfo(); - - // now uninstall, fileName a new installer. - Uninstaller uninstaller = new Uninstaller(fb(), fileOps, savedInfo, registry); - uninstaller.setInstallPath(targetPath); - uninstaller.uninstallContent(); - - assertFalse("All files should be removed after uninstall", - Files.list(targetPath).findAny().isPresent()); - } - - /** - * Test of uninstall method, of class Installer. - */ - @Test - public void testUninstallFailsOnExtraFile() throws Exception { - setupComponentInstall("truffleruby2.jar"); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - // install - installer.install(); - - ComponentInfo savedInfo = installer.getComponentInfo(); - - Path langPath = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby")); - Path roPath = langPath.resolve(SystemUtils.fromCommonString("doc/user")); - // and add a new file to that dir: - Path uf = roPath.resolve(SystemUtils.fileName("userFile.txt")); - Files.write(uf, Arrays.asList("This file", "Should vanish")); - - exception.expect(DirectoryNotEmptyException.class); - exception.expectMessage("jre/languages/ruby/doc/user".replace(SystemUtils.DELIMITER, File.separator)); - // now uninstall, fileName a new installer. - Uninstaller uninstaller = new Uninstaller(fb(), fileOps, savedInfo, registry); - uninstaller.setInstallPath(targetPath); - uninstaller.uninstallContent(); - - fail("Shouldn't be reached"); - } - - @Test - public void testRecursiveDelete() throws Exception { - // install just to get the component structure - setupComponentInstall("truffleruby2.jar"); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - // install - installer.install(); - PreRemoveProcess preRemove = new PreRemoveProcess(targetPath, fileOps, this); - Path langPath = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby")); - preRemove.deleteContentsRecursively(langPath); - - // the root dir still exists - assertTrue(Files.exists(langPath)); - // but is empty: - - assertFalse("All files should be removed by recursive delete", - Files.list(langPath).findAny().isPresent()); - } - - @Test - public void testRecursiveDeleteWithReadonlyFiles() throws Exception { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - return; - } - - // install just to get the component structure - setupComponentInstall("truffleruby2.jar"); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - // install - installer.install(); - Path langPath = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby")); - - Path roPath = langPath.resolve(SystemUtils.fromCommonString("doc/legal")); - Files.setPosixFilePermissions(roPath, PosixFilePermissions.fromString("r-xr-xr-x")); - - PreRemoveProcess preRemove = new PreRemoveProcess(targetPath, fileOps, this); - preRemove.deleteContentsRecursively(langPath); - // the root dir still exists - assertTrue(Files.exists(langPath)); - // but is empty: - - assertFalse("All files should be removed by recursive delete", - Files.list(langPath).findAny().isPresent()); - } - - @Test - public void testUninstallComponentWithROFiles() throws Exception { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - return; - } - setupComponentInstall("trufflerubyRO.jar"); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - // install - installer.install(); - - ComponentInfo savedInfo = installer.getComponentInfo(); - - // now uninstall, fileName a new installer. - Uninstaller uninstaller = new Uninstaller(fb(), fileOps, savedInfo, registry); - uninstaller.setInstallPath(targetPath); - uninstaller.uninstallContent(); - - assertFalse("All files should be removed after uninstall", - Files.list(targetPath).findAny().isPresent()); - } - - @Test - public void testUninstallComponentWithUserROFiles() throws Exception { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - return; - } - setupComponentInstall("trufflerubyWork.jar"); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - // install - installer.install(); - - ComponentInfo savedInfo = installer.getComponentInfo(); - - Path langPath = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby")); - Path roPath = langPath.resolve(SystemUtils.fromCommonString("doc/user")); - - // and add a new file to that dir: - Path uf = roPath.resolve(SystemUtils.fileName("userFile.txt")); - Files.write(uf, Arrays.asList("This file", "Should vanish")); - Files.setPosixFilePermissions(uf, PosixFilePermissions.fromString("r--r-----")); - Files.setPosixFilePermissions(roPath, PosixFilePermissions.fromString("r-xr-xr-x")); - - // now uninstall, fileName a new installer. - Uninstaller uninstaller = new Uninstaller(fb(), fileOps, savedInfo, registry); - uninstaller.setInstallPath(targetPath); - uninstaller.uninstallContent(); - - assertFalse("All files should be removed after uninstall", - Files.list(targetPath).findAny().isPresent()); - } - - /** - * Checks that the uninstall does not fail even though it cannot delete something. - */ - @Test - public void testSetIgnoreFailedDeletions() throws IOException { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - return; - } - setupComponentInstall("truffleruby2.jar"); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - // install - installer.install(); - - ComponentInfo savedInfo = installer.getComponentInfo(); - - // make some directory readonly - Path p = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby/doc/legal")); - Files.setPosixFilePermissions(p, PosixFilePermissions.fromString("r--r--r--")); - - // now uninstall, fileName a new installer. - Uninstaller uninstaller = new Uninstaller(fb(), fileOps, savedInfo, registry); - uninstaller.setInstallPath(targetPath); - uninstaller.setIgnoreFailedDeletions(true); - uninstaller.uninstall(); - } - - /** - * Checks that the uninstall does not fail even though it cannot delete something. - */ - @Test - public void testFailedDeletionAborts() throws IOException { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - return; - } - setupComponentInstall("truffleruby2.jar"); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - // install - installer.install(); - - ComponentInfo savedInfo = installer.getComponentInfo(); - - // make some directory readonly - Path p = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby/doc/legal")); - Files.setPosixFilePermissions(p, PosixFilePermissions.fromString("r--r--r--")); - - // now uninstall, fileName a new installer. - Uninstaller uninstaller = new Uninstaller(fb(), fileOps, savedInfo, registry); - uninstaller.setInstallPath(targetPath); - - exception.expect(IOException.class); - uninstaller.uninstall(); - } - - /** - * Checks that requirements are properly validated. - */ - @Test - public void testValidateRequirementsSuccess() throws Exception { - setupComponentInstall("truffleruby2.jar"); - installer.validateRequirements(); - } - - @Test - public void testValidateRequirementsGraalVersion() throws Exception { - setupComponentInstall("truffleruby2.jar"); - installer.getComponentInfo().addRequiredValue(CommonConstants.CAP_GRAALVM_VERSION, "0.33"); - - exception.expect(DependencyException.class); - exception.expectMessage("VERIFY_UpdateGraalVM"); - installer.validateRequirements(); - } - - @Test - public void testValidateRequirementsGraalVersion2() throws Exception { - - setupComponentInstall("truffleruby2.jar"); - // simulate different version of Graal installation - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.30"); - - exception.expect(DependencyException.class); - exception.expectMessage("VERIFY_UpdateGraalVM"); - installer.validateRequirements(); - } - - /** - * Checks that components with explicit java requirement fail on non-matching graalvm. - */ - @Test - public void testValidateRequirementsDifferentJava() throws Exception { - setupComponentInstall("truffleruby2-11.jar"); - - exception.expect(DependencyException.class); - exception.expectMessage("VERIFY_Dependency_Failed"); - installer.validateRequirements(); - } - - /** - * Checks that components with explicit java requirement succeeds on the correct GraalVM. - */ - @Test - public void testValidateRequirementsJavaMatches() throws Exception { - setupComponentInstall("truffleruby2-11.jar"); - storage.graalInfo.put(CommonConstants.CAP_JAVA_VERSION, "11"); - installer.validateRequirements(); - } - - /** - * Checks that the component is installed despite the requirements. - */ - @Test - public void testSetIgnoreRequirements() throws Exception { - setupComponentInstall("truffleruby2-11.jar"); - // simulate different version of Graal installation - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.30"); - - installer.setIgnoreRequirements(true); - installer.validateRequirements(); - } - - /** - * Test of install method, of class Installer. - */ - @Test - public void testInstall() throws Exception { - setupComponentInstall("truffleruby2.jar"); - installer.setSymlinks(loader.loadSymlinks()); - installer.setPermissions(loader.loadPermissions()); - installer.install(); - - Path jreRuby = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - Path binRuby = targetPath.resolve(SystemUtils.fromCommonString("bin/ruby")); - - assertTrue(Files.exists(jreRuby)); - - // symlink is skipped on Windows OS - if (!isWindows()) { - assertTrue(Files.exists(binRuby)); - } - - if (!System.getProperty("os.name").toLowerCase().contains("windows")) { - assertTrue(Files.isExecutable(jreRuby)); - assertTrue(Files.isSymbolicLink(binRuby)); - } - - // checks that everything is properly reverted - installer.revertInstall(); - - assertFalse("No files should be created under dry run", - Files.list(targetPath).findAny().isPresent()); - } - - /** - * Test of installOneFile method, of class Installer. - */ - @Test - public void testInstallOneRegularFile() throws Exception { - setupComponentInstall("truffleruby2.jar"); - /* - * inst.setPermissions(ldr.loadPermissions()); inst.setSymlinks(ldr.loadSymlinks()); - */ - Archive.FileEntry entry = componentJarFile.getJarEntry("jre/bin/ruby"); - Path resultPath = installer.installOneFile(installer.translateTargetPath(entry), entry); - Path relative = targetPath.relativize(resultPath); - assertEquals(entry.getName(), SystemUtils.toCommonPath(relative)); - - Path check = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - // assume directories are also created - assertTrue(Files.exists(check)); - assertEquals(entry.getSize(), Files.size(check)); - - // check that the installation is reverted - installer.revertInstall(); - - assertFalse(Files.exists(check)); - // two levels of directories should have been created - assertFalse(Files.exists(check.getParent())); - assertFalse(Files.exists(check.getParent().getParent())); - } - - /** - * Check that if the same file is found and skipped, it will not revert on installation abort. - */ - @Test - public void testInstallExistingFileWillNotRevert() throws Exception { - setupComponentInstall("truffleruby2.jar"); - /* - * inst.setPermissions(ldr.loadPermissions()); inst.setSymlinks(ldr.loadSymlinks()); - */ - Path existing = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - Files.createDirectories(existing.getParent()); - Files.copy(dataFile("ruby"), existing); - - Archive.FileEntry entry = componentJarFile.getJarEntry("jre/bin/ruby"); - Path resultPath = installer.installOneFile(installer.translateTargetPath(entry), entry); - Path relative = targetPath.relativize(resultPath); - assertEquals(entry.getName(), SystemUtils.toCommonPath(relative)); - - Path check = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - // assume directories are also created - assertTrue(Files.exists(check)); - assertEquals(entry.getSize(), Files.size(check)); - - // check that the installation is reverted - installer.revertInstall(); - - // MUST still exist, the installe did not fileName it - assertTrue(Files.exists(check)); - } - - /** - * Check that if the same file is found and skipped, it will not revert on installation abort. - */ - @Test - public void testInstallOverwrittemFileWillNotRevert() throws Exception { - setupComponentInstall("truffleruby2.jar"); - installer.setReplaceDiferentFiles(true); - - /* - * inst.setPermissions(ldr.loadPermissions()); inst.setSymlinks(ldr.loadSymlinks()); - */ - Path existing = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - Files.createDirectories(existing.getParent()); - Files.copy(dataFile("ruby2"), existing); - - Archive.FileEntry entry = componentJarFile.getJarEntry("jre/bin/ruby"); - Path resultPath = installer.installOneFile(installer.translateTargetPath(entry), entry); - Path relative = targetPath.relativize(resultPath); - assertEquals(entry.getName(), SystemUtils.toCommonPath(relative)); - - Path check = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - // assume directories are also created - assertTrue(Files.exists(check)); - assertEquals(entry.getSize(), Files.size(check)); - - // check that the installation is reverted - installer.revertInstall(); - - // MUST still exist, the installe did not fileName it - assertTrue(Files.exists(check)); - } - - /** - * Checks that an empty directory is installed. - */ - @Test - public void testInstallOneDirectory() throws Exception { - setupComponentInstall("truffleruby2.jar"); - - Archive.FileEntry entry = componentJarFile.getJarEntry("jre/bin/"); - installer.installOneEntry(entry); - - Path check = targetPath.resolve(SystemUtils.fromCommonString("jre/bin")); - // assume directories are also created - assertTrue(Files.exists(check)); - assertTrue(Files.isDirectory(check)); - - // rollback - installer.revertInstall(); - - assertFalse(Files.exists(check)); - } - - /** - * Checks that if a directory already exists, it will not be reverted on failed install. - */ - @Test - public void testInstallExistingDirectoryWillNotRevert() throws Exception { - setupComponentInstall("truffleruby2.jar"); - - Path existing = targetPath.resolve(SystemUtils.fromCommonString("jre/bin")); - Files.createDirectories(existing); - - Archive.FileEntry entry = componentJarFile.getJarEntry("jre/bin/"); - installer.installOneEntry(entry); - - Path check = targetPath.resolve(SystemUtils.fromCommonString("jre/bin")); - // assume directories are also created - assertTrue(Files.exists(check)); - assertTrue(Files.isDirectory(check)); - - // rollback - installer.revertInstall(); - - assertTrue(Files.exists(check)); - } - - /** - * Checks that permissions are correctly changed. Works only on UNIXes. - */ - @Test - public void testProcessPermissions() throws Exception { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - return; - } - - setupComponentInstall("truffleruby3.jar"); - installer.unpackFiles(); - // check the executable file has no permissions - Path check = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - assertFalse(Files.isExecutable(check)); - installer.processPermissions(); - // still nothing, no permissions were set - assertFalse(Files.isExecutable(check)); - installer.setPermissions(loader.loadPermissions()); - installer.processPermissions(); - assertTrue(Files.isExecutable(check)); - assertTrue(Files.isExecutable(targetPath.resolve( - SystemUtils.fromCommonString("jre/languages/ruby/bin/ri")))); - } - - /** - * Checks correct creation of symlinks. Works only on UNIXes. - */ - @Test - public void testCreateSymlinks() throws Exception { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - return; - } - setupComponentInstall("truffleruby2.jar"); - installer.unpackFiles(); - - // check the executable file has no permissions - Path check = targetPath.resolve(SystemUtils.fromCommonString("bin/ruby")); - assertFalse(Files.exists(check)); - - installer.setSymlinks(loader.loadSymlinks()); - installer.createSymlinks(); - - assertTrue(Files.exists(check)); - assertTrue(Files.isSymbolicLink(check)); - Path target = Files.readSymbolicLink(check); - - Path resolved = targetPath.relativize(check.resolveSibling(target).normalize()); - assertEquals("jre/bin/ruby", SystemUtils.toCommonPath(resolved)); - - installer.revertInstall(); - - assertFalse(Files.exists(check)); - } - - /** - * Test of checkFileReplacement method, of class Installer. - */ - @Test - public void testCheckFileReplacementSame() throws Exception { - setupComponentInstall("truffleruby2.jar"); - - Path existingOrig = dataFile("ruby"); - - Path existing = expandedFolder.newFile("testCheckFileReplacementSame-ruby").toPath(); - // regardless of CRLF, join lines with \n, write as bytes to bypass CRLF conversion. - Files.write(existing, (String.join("\n", Files.readAllLines(existingOrig)) + "\n").getBytes("UTF-8")); - - Archive.FileEntry je = componentJarFile.getJarEntry("jre/bin/ruby"); - - // should pass: - installer.checkFileReplacement(existing, je); - } - - /** - * Test of checkFileReplacement method, of class Installer. - */ - @Test - public void testCheckFileReplacementDifferent() throws Exception { - setupComponentInstall("truffleruby2.jar"); - - Path existing = dataFile("ruby2"); - Archive.FileEntry je = componentJarFile.getJarEntry("jre/bin/ruby"); - - // should fail: - exception.expect(FailedOperationException.class); - exception.expectMessage("INSTALL_ReplacedFileDiffers"); - installer.checkFileReplacement(existing, je); - } - - /** - * Test of checkFileReplacement method, of class Installer. - */ - @Test - public void testCheckFileReplacementForced() throws Exception { - setupComponentInstall("truffleruby2.jar"); - installer.setReplaceDiferentFiles(true); - - Path existing = dataFile("ruby2"); - Archive.FileEntry je = componentJarFile.getJarEntry("jre/bin/ruby"); - - // should succeed: - installer.checkFileReplacement(existing, je); - } - - /** - * Checks that the install does not do anything if dry run is enabled. - */ - @Test - public void testSetDryRun() throws IOException { - setupComponentInstall("truffleruby2.jar"); - installer.setDryRun(true); - installer.setPermissions(loader.loadPermissions()); - installer.setSymlinks(loader.loadSymlinks()); - - installer.install(); - - assertFalse("No files should be created under dry run", - Files.list(targetPath).findAny().isPresent()); - } - - @Test - public void testValidateFiles() throws Exception { - setupComponentInstall("truffleruby2.jar"); - installer.validateFiles(); - - installer.setSymlinks(loader.loadSymlinks()); - installer.setPermissions(loader.loadPermissions()); - - installer.validateAll(); - } - - @Test - public void testValidateOverwriteDirectoryWithFile() throws IOException { - setupComponentInstall("truffleruby2.jar"); - Path offending = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - Files.createDirectories(offending); - Archive.FileEntry entry = componentJarFile.getJarEntry("jre/bin/ruby"); - - exception.expect(IOException.class); - exception.expectMessage("INSTALL_OverwriteWithFile"); - installer.validateOneEntry( - installer.translateTargetPath(entry), entry); - } - - @Test - public void testValidateOverwriteFileWithDirectory() throws IOException { - setupComponentInstall("truffleruby2.jar"); - Path offending = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby")); - Files.createDirectories(offending.getParent()); - Files.createFile(offending); - Archive.FileEntry entry = componentJarFile.getJarEntry("jre/languages/ruby/"); - - exception.expect(IOException.class); - exception.expectMessage("INSTALL_OverwriteWithDirectory"); - installer.validateOneEntry( - installer.translateTargetPath(entry), entry); - } - - @Test - public void testRevertInstallFailureFile() throws Exception { - if (isWindows()) { - return; - } - setupComponentInstall("truffleruby2.jar"); - Path jreRuby = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - Files.createDirectories(jreRuby.getParent()); - installer.install(); - - assertTrue(Files.exists(jreRuby)); - - Files.setPosixFilePermissions( - jreRuby.getParent(), PosixFilePermissions.fromString("r-xr-xr-x")); - // checks that everything is properly reverted - try { - class FD extends FeedbackAdapter { - List errors = new ArrayList<>(); - - @Override - public void error(String key, Throwable t, Object... params) { - errors.add(key); - } - - } - FD fd = new FD(); - delegateFeedback(fd); - installer.revertInstall(); - // must report something - assertTrue(fd.errors.isEmpty()); - assertFalse(Files.exists(jreRuby)); - } finally { - Files.setPosixFilePermissions( - jreRuby.getParent(), PosixFilePermissions.fromString("rwxrwxrwx")); - } - } - - @Test - public void testRevertInstallFailureDir() throws Exception { - if (isWindows()) { - return; - } - setupComponentInstall("truffleruby2.jar"); - Path jreLang = targetPath.resolve(SystemUtils.fromCommonString("jre/languages")); - Files.createDirectories(jreLang); - installer.install(); - - assertTrue(Files.exists(jreLang)); - - Files.setPosixFilePermissions( - jreLang, PosixFilePermissions.fromString("r-xr-xr-x")); - // checks that everything is properly reverted - try { - class FD extends FeedbackAdapter { - List errors = new ArrayList<>(); - - @Override - public void error(String key, Throwable t, Object... params) { - errors.add(key); - } - - } - FD fd = new FD(); - delegateFeedback(fd); - installer.revertInstall(); - // must report something - assertTrue(fd.errors.isEmpty()); - assertFalse(Files.list(jreLang).iterator().hasNext()); - } finally { - Files.setPosixFilePermissions( - jreLang, PosixFilePermissions.fromString("rwxrwxrwx")); - } - } - - @Test - public void testUnpackExistingSymlinks() throws Exception { - if (System.getProperty("os.name").toLowerCase().contains("windows")) { - return; - } - setupComponentInstall("truffleruby2.jar"); - Path offending = targetPath.resolve(SystemUtils.fromCommonString("bin/ruby")); - Files.createDirectories(offending.getParent()); - Files.createSymbolicLink(offending, SystemUtils.fromCommonString("../jre/bin/ruby")); - - Path offending2 = targetPath.resolve(SystemUtils.fromCommonString("jre/languages/ruby/bin/ruby")); - Files.createDirectories(offending2.getParent()); - Files.createSymbolicLink(offending2, SystemUtils.fileName("xxx")); - - installer.setReplaceDiferentFiles(true); - installer.setSymlinks(loader.loadSymlinks()); - installer.createSymlinks(); - - List paths = componentInfo.getPaths(); - assertTrue(paths.contains("bin/ruby")); - assertTrue(paths.contains("jre/languages/ruby/bin/ruby")); - - assertEquals(SystemUtils.fileName("truffleruby"), Files.readSymbolicLink(offending2)); - } - - @Test - public void testFailOverwriteFileWithSymlink() throws Exception { - setupComponentInstall("truffleruby2.jar"); - // prepare offending symlink going elsewhere - - Path offending = targetPath.resolve(SystemUtils.fromCommonString("bin/ruby")); - Files.createDirectories(offending.getParent()); - Files.createFile(offending); - - exception.expect(IOException.class); - exception.expectMessage("INSTALL_OverwriteWithLink"); - installer.setSymlinks(loader.loadSymlinks()); - installer.validateSymlinks(); - } - - @Test - public void testOverwriteFileWithSymlink() throws Exception { - if (isWindows()) { - return; - } - - setupComponentInstall("truffleruby2.jar"); - // prepare offending symlink going elsewhere - - Path offending = targetPath.resolve(SystemUtils.fromCommonString("bin/ruby")); - Files.createDirectories(offending.getParent()); - Files.createSymbolicLink(offending, targetPath.resolve(SystemUtils.fromCommonString("../jre/bin/ruby"))); - - installer.setReplaceDiferentFiles(true); - installer.setSymlinks(loader.loadSymlinks()); - installer.validateSymlinks(); - } - - @Test - public void testFailOverwriteOtherSymlink() throws Exception { - if (isWindows()) { - return; - } - - setupComponentInstall("truffleruby2.jar"); - // prepare offending symlink going elsewhere - - Path offending = targetPath.resolve(SystemUtils.fromCommonString("bin/ruby")); - Files.createDirectories(offending.getParent()); - Files.createSymbolicLink(offending, targetPath.resolve(SystemUtils.fromCommonString("../x"))); - - exception.expect(FailedOperationException.class); - exception.expectMessage("INSTALL_ReplacedFileDiffers"); - installer.setSymlinks(loader.loadSymlinks()); - installer.validateSymlinks(); - } - - @Test - public void testOverwriteOtherSymlink() throws Exception { - if (isWindows()) { - return; - } - setupComponentInstall("truffleruby2.jar"); - // prepare offending symlink going elsewhere - - Path offending = targetPath.resolve(SystemUtils.fromCommonString("bin/ruby")); - Files.createDirectories(offending.getParent()); - Files.createSymbolicLink(offending, targetPath.resolve(SystemUtils.fromCommonString("../x"))); - - installer.setSymlinks(loader.loadSymlinks()); - installer.setReplaceDiferentFiles(true); - installer.validateSymlinks(); - } - - /** - * Checks that installer blocks files in component storage directory, but not in subdirs. - */ - @Test - public void testComponentRegistryNotWrittenTo() throws Exception { - setupComponentInstall("trufflerubyWork.jar"); - installer.setSymlinks(loader.loadSymlinks()); - installer.setPermissions(loader.loadPermissions()); - installer.install(); - - Path p = targetPath.resolve(SystemUtils.fromCommonString(CommonConstants.PATH_COMPONENT_STORAGE)); - Path rubyMeta = p.resolve("org.graalvm.ruby.meta"); - Path other = p.resolve("other"); - Path pythonList = p.resolve("python.list"); - - assertFalse(Files.exists(rubyMeta)); - assertFalse(Files.exists(pythonList)); - - assertTrue(Files.exists(other)); - } - - private static final String BLOCKED_CONTENT = "This is a blocked file"; // NOI18N - private static final String INSTALL_CONTENT = "Test content: ./jre/bin/ruby"; // NOI18N - - /** - * Checks that install that wants to overwrite a 'blocked' file will succeed, but record the - * file as one which has to be copied over afterwards. - */ - @Test - public void testOverwriteBlockedFile() throws Exception { - Path blockedFile = targetPath.resolve(SystemUtils.fromCommonString("jre/bin/ruby")); - Files.createDirectories(blockedFile.getParent()); - Files.write(blockedFile, Arrays.asList(BLOCKED_CONTENT)); - - BlockedFileOps blockedOps = new BlockedFileOps(); - fileOps = blockedOps; - fileOps.init(this); - fileOps.setRootPath(targetPath); - - blockedOps.blockedPaths.add(blockedFile); - Path delayDeletes = folder.newFile("delayDeletes").toPath(); - Path copiedFiles = folder.newFile("copiedDirs").toPath(); - blockedOps.setDelayDeletedList(delayDeletes); - blockedOps.setCopyContents(copiedFiles); - - setupComponentInstall("trufflerubyWork.jar"); - installer.setSymlinks(loader.loadSymlinks()); - installer.setPermissions(loader.loadPermissions()); - installer.setReplaceDiferentFiles(true); - installer.install(); - - assertTrue(blockedOps.getDelayDeletedPaths().isEmpty()); - Map copies = blockedOps.getCopiedPaths(); - Path copyDir = targetPath.resolve(SystemUtils.fromCommonString("jre/bin.new")); - Path copyFile = copyDir.resolve("ruby"); - assertEquals(1, copies.size()); - assertEquals(copyDir, copies.get(blockedFile.getParent())); - assertEquals(BLOCKED_CONTENT, Files.readAllLines(blockedFile).get(0)); - assertEquals(INSTALL_CONTENT, Files.readAllLines(copyFile).get(0)); - - // check that the logfiles are OK - assertTrue(blockedOps.flush()); - - // no file is delay-deleted - assertEquals(0, Files.readAllLines(delayDeletes).size()); - - // one directory is post-moved - String l = blockedFile.getParent().toString() + "|" + copyDir.toString(); - assertEquals(l, Files.readAllLines(copiedFiles).get(0)); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/LicensePresenterTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/LicensePresenterTest.java deleted file mode 100644 index afe77ff1fa16..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/LicensePresenterTest.java +++ /dev/null @@ -1,413 +0,0 @@ -/* - * Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.jar.JarFile; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.UserAbortException; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.jar.JarMetaLoader; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.DirectoryMetaLoader; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.persist.test.Handler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class LicensePresenterTest extends CommandTestBase { - MetadataLoader loader; - Path dirPath; - Map> licenseIDs = new LinkedHashMap<>(); - - ComponentInfo licensedInfo; - - ComponentInfo createLicensedComponentInfo() throws IOException { - Path p = dataFile("licensetest.jar"); - JarFile jf = new JarFile(p.toFile()); - loader = new JarMetaLoader(jf, this); - licensedInfo = loader.completeMetadata(); - - return licensedInfo; - } - - private void initLoader(String f) throws IOException { - if (loader != null) { - loader.close(); - } - Path p = expandedFolder.getRoot().toPath().resolve(testName.getMethodName()); - if (!Files.isDirectory(p)) { - Files.createDirectory(p); - } - dirPath = dataFile(f); - loader = DirectoryMetaLoader.create(dirPath, this); - licensedInfo = loader.completeMetadata(); - } - - @Test - public void testAcceptedLicensesWillBeSuppressed() throws Exception { - initLoader("license.ruby"); - - LicensePresenter p = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - licenseIDs.put(loader.getLicenseID(), new ArrayList<>(Arrays.asList(loader))); - Map comps = new HashMap<>(); - comps.put(loader.getLicenseID(), new Date()); - this.storage.acceptedLicenses.put(loader.getComponentInfo().getId(), comps); - p.init(); - assertTrue(p.isFinished()); - } - - @Test - public void testLicensesWillShow() throws Exception { - initLoader("license.ruby"); - - LicensePresenter p = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - licenseIDs.put(loader.getLicenseID(), new ArrayList<>(Arrays.asList(loader))); - - p.init(); - assertFalse(p.isFinished()); - assertEquals(LicensePresenter.State.SINGLE, p.getState()); - } - - class LicFeedback extends FeedbackAdapter { - boolean questionAsked; - String answer; - String licenseQuestion; - - LicFeedback(String licenseQuestion) { - this.licenseQuestion = licenseQuestion; - } - - @Override - public String l10n(String key, Object... params) { - if (key.contains("AcceptPrompt")) { - return reallyl10n(key, params); - } - return super.l10n(key, params); - } - - @Override - public String acceptLine(boolean yes) { - return answer; - } - - @Override - public void output(String bundleKey, Object... params) { - if (bundleKey.equals(licenseQuestion)) { - questionAsked = true; - } - super.output(bundleKey, params); - } - } - - void addLoader(String rpmName) throws Exception { - initLoader(rpmName); - licenseIDs.computeIfAbsent(loader.getLicenseID(), (n) -> new ArrayList<>()).add(loader); - } - - LicensePresenter pres; - LicFeedback licF; - - /** - * Checks that single license will display prompt and accepts "Read". - */ - @Test - public void testSingleLicenseDisplaysQuestion() throws Exception { - addLoader("license.ruby"); - - pres = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - pres.init(); - - licF = new LicFeedback("INSTALL_AcceptLicense"); - delegateFeedback(licF); - licF.answer = "r"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - assertTrue(licF.questionAsked); - - pres.init(); - licF.answer = "R"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - - pres.init(); - licF.answer = "Read"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - - pres.init(); - licF.answer = "rEaD"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - } - - /** - * Any other answer than Y or R will abort the operation. - */ - public void testSingleLicenseUserAbort() throws Exception { - addLoader("license.ruby"); - - LicensePresenter p = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - p.init(); - - LicFeedback d = new LicFeedback("INSTALL_AcceptLicense"); - delegateFeedback(d); - d.answer = "a"; - exception.expect(UserAbortException.class); - p.singleStep(); - } - - /** - * License can be accepted even without reading the text. - */ - @Test - public void testSingleLicenseAcceptNoRead() throws Exception { - addLoader("license.ruby"); - - pres = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - pres.init(); - - LicFeedback d = new LicFeedback("INSTALL_AcceptLicense"); - delegateFeedback(d); - d.answer = "y"; - pres.singleStep(); - assertTrue(pres.isFinished()); - assertTrue(!storage.acceptedLicenses.isEmpty()); - } - - /** - * License can be accepted after reading its text. - */ - @Test - public void testSingleLicenseAcceptAfterRead() throws Exception { - addLoader("license.ruby"); - - pres = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - pres.init(); - - licF = new LicFeedback("INSTALL_AcceptLicense"); - delegateFeedback(licF); - licF.answer = "r"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - assertTrue(licF.questionAsked); - - // prepare - licF.questionAsked = false; - licF.licenseQuestion = "INSTALL_AcceptLicensePrompt"; - licF.answer = "y"; - pres.singleStep(); - - assertTrue(pres.isFinished()); - assertTrue(licenseIDs.isEmpty()); - assertFalse(storage.acceptedLicenses.isEmpty()); - } - - /** - * License can be accepted after reading its text. - */ - @Test - public void testSingleLicenseAAbortAfterRead() throws Exception { - addLoader("license.ruby"); - - pres = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - pres.init(); - - licF = new LicFeedback("INSTALL_AcceptLicense"); - delegateFeedback(licF); - licF.answer = "r"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - assertTrue(licF.questionAsked); - - // prepare - licF.questionAsked = false; - licF.licenseQuestion = "INSTALL_AcceptLicensePrompt"; - licF.answer = "X"; - exception.expect(UserAbortException.class); - pres.singleStep(); - } - - Map> savedLicenseIDs; - - public void assertYes() throws Exception { - licenseIDs.clear(); - licenseIDs.putAll(savedLicenseIDs); - pres.init(); - licF.answer = "Y"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - - licenseIDs.clear(); - licenseIDs.putAll(savedLicenseIDs); - pres.init(); - licF.answer = "yes"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - - licenseIDs.clear(); - licenseIDs.putAll(savedLicenseIDs); - pres.init(); - licF.answer = "YeS"; - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - } - - @Test - public void testMultiLicensesDisplaysMenu() throws Exception { - addLoader("license.python"); - addLoader("license.ruby"); - - pres = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - licenseIDs.put(loader.getLicenseID(), new ArrayList<>(Arrays.asList(loader))); - pres.init(); - - assertFalse(pres.isFinished()); - assertEquals(LicensePresenter.State.LIST, pres.getState()); - - pres.singleStep(); - assertEquals(LicensePresenter.State.LISTINPUT, pres.getState()); - } - - @Test - public void testMultiAcceptAll() throws Exception { - addLoader("license.python"); - addLoader("license.ruby"); - - licF = new LicFeedback("INSTALL_AcceptAllLicensesPrompt"); - pres = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - pres.init(); - pres.singleStep(); - licF.answer = "Y"; - delegateFeedback(licF); - pres.singleStep(); - - assertTrue(pres.isFinished()); - assertEquals(2, storage.acceptedLicenses.size()); - } - - @Test - public void testMultiReadsLicense() throws Exception { - addLoader("license.python"); - addLoader("license.ruby"); - - pres = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - pres.init(); - - savedLicenseIDs = new LinkedHashMap<>(licenseIDs); - - class X extends LicFeedback { - StringBuilder licText = new StringBuilder(); - - X(String licenseQuestion) { - super(licenseQuestion); - } - - @Override - public boolean verbatimOut(String msg, boolean beVerbose) { - licText.append(msg); - return super.verbatimOut(msg, beVerbose); - } - } - X x = new X("INSTALL_AcceptAllLicensesPrompt"); - licF = x; - licF.answer = "1"; - delegateFeedback(licF); - pres.singleStep(); - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - - licF.answer = "y"; - pres.singleStep(); - assertTrue(x.licText.toString().toLowerCase().contains("python")); - - // single license remains, but still in LIST state - assertEquals(LicensePresenter.State.LIST, pres.getState()); - - // reinitialize - licenseIDs.clear(); - licenseIDs.putAll(savedLicenseIDs); - storage.acceptedLicenses.clear(); - x.licText.delete(0, x.licText.length()); - - pres.init(); - licF.answer = "2"; - pres.singleStep(); - pres.singleStep(); - assertEquals(LicensePresenter.State.LICENSE, pres.getState()); - - licF.answer = "y"; - pres.singleStep(); - assertTrue(x.licText.toString().toLowerCase().contains("ruby")); - - assertEquals(LicensePresenter.State.LIST, pres.getState()); - } - - @Rule public ProxyResource proxyResource = new ProxyResource(); - - /** - * Checks that a remote license is downloaded from the URL. - * - * @throws Exception - */ - @Test - public void testLicenseRemoteDownload() throws Exception { - addLoader("license.ruby"); - URL licURL = getClass().getResource("license.ruby/license.txt"); - - URL remoteUrl = SystemUtils.toURL("test://somewhere.org/license.txt"); - Handler.bind(remoteUrl.toString(), licURL); - licensedInfo.setLicensePath(remoteUrl.toString()); - - pres = new LicensePresenter(this, getLocalRegistry(), licenseIDs); - pres.init(); - - LicFeedback d = new LicFeedback("INSTALL_AcceptLicense"); - delegateFeedback(d); - d.answer = "y"; - pres.singleStep(); - assertTrue(pres.isFinished()); - - assertTrue(Handler.isVisited(remoteUrl)); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ListTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ListTest.java deleted file mode 100644 index de1b18df4157..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ListTest.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.BufferedReader; -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.file.Path; -import java.util.HashSet; -import java.util.Locale; -import java.util.Objects; -import java.util.Properties; -import java.util.Set; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENTS; -import org.graalvm.component.installer.MemoryFeedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.remote.RemotePropertiesStorage; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.graalvm.shadowed.org.json.JSONArray; -import org.graalvm.shadowed.org.json.JSONObject; -import org.graalvm.shadowed.org.json.JSONTokener; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TestName; - -/** - * - * @author sdedic - */ -public class ListTest extends CommandTestBase { - @Rule public TestName name = new TestName(); - - private static final String GVM_VERSION = "1.0.0-rc3-dev"; - private static final String STABILITY = "ComponentStabilityLevel_undefined"; - - private RemotePropertiesStorage remoteStorage; - private Properties catalogContents = new Properties(); - - private void initRemoteStorage() throws MalformedURLException { - this.remoteStorage = new RemotePropertiesStorage( - this, getLocalRegistry(), catalogContents, - "linux_amd64", - Version.fromString("1.0.0-rc3-dev"), - SystemUtils.toURL("http://go.to/graalvm")); - this.registry = new CatalogContents(this, remoteStorage, localRegistry); - } - - private StringBuilder outb = new StringBuilder(); - - @Test - public void testAvailablePrintAll() throws Exception { - try (InputStream is = getClass().getResourceAsStream("catalog.rcb1")) { - catalogContents.load(is); - } - initRemoteStorage(); - - options.put(Commands.OPTION_SHOW_UPDATES, ""); - AvailableCommand avC = new AvailableCommand(); - avC.init(this, this.withBundle(AvailableCommand.class)); - - delegateFeedback(new FeedbackAdapter() { - @Override - public String l10n(String key, Object... params) { - if ("LIST_ComponentShortList".equals(key) || (key != null && key.startsWith("ComponentStability"))) { - return reallyl10n(key, params); - } - return null; - } - - @Override - public void output(String bundleKey, Object... params) { - outb.append(bundleKey); - if (params != null && params.length > 0) { - outb.append("{"); - for (Object o : params) { - outb.append(Objects.toString(o)); - } - outb.append("}"); - } - outb.append("\n"); - } - - @Override - public boolean verbatimOut(String msg, boolean beVerbose) { - outb.append(msg).append("\n"); - return super.verbatimOut(msg, beVerbose); - } - }); - avC.execute(); - - assertOutputContents(null); - } - - private void assertOutputContents(String aMsg) throws Exception { - String msg = aMsg != null ? aMsg : "Contents must match"; - String n = name.getMethodName(); - if (n.startsWith("test") && n.length() > 6) { - n = Character.toLowerCase(n.charAt(4)) + n.substring(5); - } - URL u = getClass().getResource(n + ".golden"); - if (u == null) { - return; - } - StringBuilder check = new StringBuilder(); - try (InputStream is = u.openStream(); - BufferedReader rdr = new BufferedReader(new InputStreamReader(is))) { - String s = null; - - while ((s = rdr.readLine()) != null) { - if (check.length() > 0) { - check.append("\n"); - } - check.append(s); - } - } - assertEquals(msg, check.toString(), outb.toString()); - } - - /** - * Tests that 'list' will print matching components. - */ - @Test - public void testListSpecifiedComponents() throws Exception { - storage.installed.add( - new ComponentInfo("org.graalvm.R", "FastR", Version.fromString("1.0.0"))); - storage.installed.add( - new ComponentInfo("org.graalvm.ruby", "Ruby", Version.fromString("1.0.0"))); - storage.installed.add( - new ComponentInfo("org.graalvm.python", "Python", Version.fromString("1.0.0"))); - - ListInstalledCommand inst = new ListInstalledCommand() { - @Override - boolean process() { - super.process(); - // block the actual print - return false; - } - }; - textParams.add("ruby"); - textParams.add("r"); - textParams.add("python"); - inst.init(this, this); - - inst.execute(); - - Set found = new HashSet<>(); - assertEquals(3, inst.getComponents().size()); - for (ComponentInfo ci : inst.getComponents()) { - assertTrue(found.add(ci.getId().toLowerCase())); - } - assertTrue(found.contains("org.graalvm.r")); - assertTrue(found.contains("org.graalvm.ruby")); - assertTrue(found.contains("org.graalvm.python")); - } - - /** - * Tests that 'list' will print components but just those newer than us. - */ - @Test - public void testListSpecifiedNewerComponents() throws Exception { - Version v = Version.fromString("1.1.0"); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, v.originalString()); - assert110Components(v, v); - } - - /** - * Checks that compatible components will be listed if 1st parameter is the version. - */ - @Test - public void testListSpecifiedNewerComponentsExplicit() throws Exception { - Version v = Version.fromString("1.0.0"); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, v.originalString()); - textParams.add("+1.1.0"); - assert110Components(v, Version.fromString("1.1.0")); - } - - private void assert110Components(Version v, Version min) throws Exception { - Path p = dataFile("../repo/catalog.properties"); - try (InputStream is = new FileInputStream(p.toFile())) { - catalogContents.load(is); - } - this.remoteStorage = new RemotePropertiesStorage( - this, getLocalRegistry(), catalogContents, - "linux_amd64", - v, - SystemUtils.toURL("http://go.to/graalvm")); - this.registry = new CatalogContents(this, remoteStorage, localRegistry); - - AvailableCommand inst = new AvailableCommand() { - @Override - boolean process() { - super.process(); - // block the actual print - return false; - } - }; - textParams.add("r"); - textParams.add("ruby"); - textParams.add("python"); - inst.init(this, this.withBundle(ListInstalledCommand.class)); - - inst.execute(); - - Set found = new HashSet<>(); - for (ComponentInfo ci : inst.getComponents()) { - if (ci.getId().equals(BundleConstants.GRAAL_COMPONENT_ID)) { - continue; - } - assertTrue(found.add(ci.getId().toLowerCase())); - assertTrue(min.compareTo(ci.getVersion()) <= 0); - } - // ruby not present - assertFalse(found.contains("org.graalvm.ruby")); - assertTrue(found.contains("org.graalvm.r")); - assertTrue(found.contains("org.graalvm.python")); - } - - @Test - public void testJSONOutput() throws Exception { - options.put(Commands.OPTION_JSON_OUTPUT, ""); - - try (InputStream is = getClass().getResourceAsStream("catalog.rcb1")) { - catalogContents.load(is); - } - initRemoteStorage(); - - options.put(Commands.OPTION_SHOW_UPDATES, ""); - AvailableCommand avC = new AvailableCommand(); - avC.init(this, this.withBundle(AvailableCommand.class)); - - MemoryFeedback mf = new MemoryFeedback(); - delegateFeedback(mf); - avC.execute(); - - for (MemoryFeedback.Memory mem : mf) { - if (!mem.silent) { - JSONObject jo = new JSONObject(new JSONTokener(mem.key)); - JSONArray comps = jo.getJSONArray(JSON_KEY_COMPONENTS); - assertEquals(3, comps.length()); - for (int i = 0; i < comps.length(); ++i) { - JSONObject comp = comps.getJSONObject(i); - assertEquals(comp.toString(2), GVM_VERSION, comp.getString(CommonConstants.JSON_KEY_COMPONENT_GRAALVM)); - assertEquals(comp.toString(2), GVM_VERSION, comp.getString(CommonConstants.JSON_KEY_COMPONENT_VERSION)); - assertEquals(comp.toString(2), STABILITY, comp.getString(CommonConstants.JSON_KEY_COMPONENT_STABILITY)); - assertTrue(comp.toString(2), comp.getString(CommonConstants.JSON_KEY_COMPONENT_ORIGIN).contains(comp.getString(CommonConstants.JSON_KEY_COMPONENT_ID).toLowerCase(Locale.ENGLISH))); - assertTrue(comp.toString(2), comp.getString(CommonConstants.JSON_KEY_COMPONENT_NAME) != null); - } - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/MockStorage.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/MockStorage.java deleted file mode 100644 index 8067212efd4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/MockStorage.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import static org.graalvm.component.installer.CommonConstants.CAP_GRAALVM_VERSION; -import static org.graalvm.component.installer.CommonConstants.CAP_OS_ARCH; -import static org.graalvm.component.installer.CommonConstants.CAP_OS_NAME; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; -import org.graalvm.component.installer.CommonConstants; -import static org.graalvm.component.installer.CommonConstants.CAP_JAVA_VERSION; -import org.graalvm.component.installer.FailedOperationException; - -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ManagementStorage; - -/** - * Mock implementation of component storage to avoid mess with disk files. - */ -public class MockStorage implements ManagementStorage { - public static final Map DEFAULT_GRAAL_INFO = new HashMap<>(); - - static { - DEFAULT_GRAAL_INFO.put(CAP_GRAALVM_VERSION, "0.32"); - DEFAULT_GRAAL_INFO.put(CAP_OS_ARCH, "amd64"); - DEFAULT_GRAAL_INFO.put(CAP_OS_NAME, "linux"); - DEFAULT_GRAAL_INFO.put(CAP_JAVA_VERSION, "8"); - DEFAULT_GRAAL_INFO.put(CommonConstants.CAP_EDITION, "ce"); - } - - public Map> acceptedLicenses = new HashMap<>(); - public Map licText = new HashMap<>(); - public List installed = new ArrayList<>(); - public Map graalInfo = new HashMap<>(DEFAULT_GRAAL_INFO); - public Map> replacedFiles = new HashMap<>(); - public Map> updatedReplacedFiles = new HashMap<>(); - public List savedInfos = new ArrayList<>(); - public String writableUser; - - @Override - public void deleteComponent(String id) throws IOException { - // no op - for (Iterator it = installed.iterator(); it.hasNext();) { - ComponentInfo info = it.next(); - if (id.equals(info.getId())) { - it.remove(); - } - } - } - - @Override - public Set listComponentIDs() throws IOException { - return installed.stream().map((ci) -> ci.getId()).collect(Collectors.toSet()); - } - - @Override - public ComponentInfo loadComponentFiles(ComponentInfo ci) throws IOException { - return ci; - } - - @Override - public Set loadComponentMetadata(String tag) throws IOException { - ComponentInfo ret = installed.stream().filter((ci) -> ci.getId().equals(tag)).findFirst().orElse(null); - return ret == null ? null : Collections.singleton(ret); - } - - @Override - public Map loadGraalVersionInfo() { - return graalInfo; - } - - @Override - public Map> readReplacedFiles() throws IOException { - return new HashMap<>(replacedFiles); - } - - @Override - public void saveComponent(ComponentInfo info) throws IOException { - // simulate DiretoryStorage verification - if (writableUser != null) { - throw new FailedOperationException("ADMIN"); - } - savedInfos.add(info); - } - - @Override - public void updateReplacedFiles(Map> newReplacedFiles) throws IOException { - updatedReplacedFiles = newReplacedFiles; - } - - @Override - public Date licenseAccepted(ComponentInfo info, String licenseID) { - return acceptedLicenses.getOrDefault(info.getId(), Collections.emptyMap()).get(licenseID); - } - - @Override - public void recordLicenseAccepted(ComponentInfo info, String licenseID, String text, Date d) throws IOException { - if (info == null) { - acceptedLicenses.clear(); - return; - } - Map acc = acceptedLicenses.computeIfAbsent(info.getId(), (i) -> new HashMap<>()); - if (licenseID != null) { - acc.put(licenseID, d != null ? d : new Date()); - licText.putIfAbsent(licenseID, text); - } else { - acc.clear(); - } - } - - @Override - public Map> findAcceptedLicenses() { - Map> result = new HashMap<>(); - for (String id : acceptedLicenses.keySet()) { - result.put(id, acceptedLicenses.get(id).keySet()); - } - return result; - } - - @Override - public String licenseText(String licID) { - return licText.get(licID); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/UninstallTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/UninstallTest.java deleted file mode 100644 index dcca24427908..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/UninstallTest.java +++ /dev/null @@ -1,245 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.nio.file.Path; -import java.util.Collection; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.rules.TestName; - -/** - * - * @author sdedic - */ -public class UninstallTest extends CommandTestBase { - @Rule public TestName name = new TestName(); - @Rule public ExpectedException exception = ExpectedException.none(); - - CatalogContents componentCatalog; - - private void setupComponentsWithDeps() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "19.3-dev"); - Path catalogFile = dataFile("cataloginstallDeps.properties"); - RemoteCatalogDownloader downloader = new RemoteCatalogDownloader(this, this, - catalogFile.toUri().toURL()); - componentCatalog = new CatalogContents(this, downloader.getStorage(), getLocalRegistry()); - - ComponentInfo ruby = componentCatalog.findComponent("org.graalvm.ruby"); - ComponentInfo fastr = componentCatalog.findComponent("org.graalvm.r"); - Set deps = new HashSet<>(); - componentCatalog.findDependencies(ruby, true, null, deps); - componentCatalog.findDependencies(fastr, true, null, deps); - deps.add(ruby); - deps.add(fastr); - storage.installed.addAll(deps); - deps.forEach((ci) -> ci.setInfoPath("")); - } - - /** - * Schedules uninstallation of a leaf component, no breakages. - */ - @Test - public void testUninstallLeaf() throws Exception { - setupComponentsWithDeps(); - - UninstallCommand uc = new UninstallCommand(); - uc.init(this, this); - textParams.add("ruby"); - uc.prepareUninstall(); - assertTrue(uc.getBrokenDependencies().isEmpty()); - assertEquals(1, uc.getUninstallComponents().size()); - - // should succeed - uc.checkBrokenDependencies(); - } - - /** - * Schedules uninstallation of a library. One component should become broken. - */ - @Test - public void testUninstallLibraryFailure() throws Exception { - setupComponentsWithDeps(); - - UninstallCommand uc = new UninstallCommand(); - uc.init(this, this.withBundle(UninstallCommand.class)); - textParams.add("org.graalvm.native-image"); - - uc.prepareUninstall(); - assertFalse(uc.getBrokenDependencies().isEmpty()); - assertEquals(1, uc.getUninstallComponents().size()); - - ComponentInfo nimage = localRegistry.findComponent("org.graalvm.native-image"); - ComponentInfo ruby = localRegistry.findComponent("org.graalvm.ruby"); - assertSame(nimage, uc.getUninstallComponents().iterator().next()); - - Collection broken = uc.getBrokenDependencies().get(nimage); - assertNotNull(broken); - assertSame(ruby, broken.iterator().next()); - - exception.expect(FailedOperationException.class); - exception.expectMessage("UNINSTALL_BreakDependenciesTerminate"); - uc.checkBrokenDependencies(); - } - - @Test - public void testUninstallIgnoreDeps() throws Exception { - setupComponentsWithDeps(); - options.put(Commands.OPTION_NO_DEPENDENCIES, ""); - - UninstallCommand uc = new UninstallCommand(); - uc.init(this, this.withBundle(UninstallCommand.class)); - textParams.add("org.graalvm.native-image"); - - uc.prepareUninstall(); - assertTrue(uc.getBrokenDependencies().isEmpty()); - - uc.checkBrokenDependencies(); - uc.includeAndOrderComponents(); - List comps = uc.getUninstallSequence(); - assertEquals(1, comps.size()); - } - - /** - * Library is to be uninstalled together with a feature it is using the library. Should succeed - */ - @Test - public void testUninstallLibraryWithUsers() throws Exception { - setupComponentsWithDeps(); - - UninstallCommand uc = new UninstallCommand(); - uc.init(this, this.withBundle(UninstallCommand.class)); - textParams.add("org.graalvm.native-image"); - textParams.add("org.graalvm.ruby"); - - uc.prepareUninstall(); - // broken ruby is recorded - assertFalse(uc.getBrokenDependencies().isEmpty()); - assertEquals(2, uc.getUninstallComponents().size()); - // however it will not fail the installation - uc.checkBrokenDependencies(); - } - - /** - * Force flag allows to broken components. Check that warning is printed. - */ - @Test - public void testUninstallBreakForced() throws Exception { - setupComponentsWithDeps(); - - UninstallCommand uc = new UninstallCommand(); - uc.init(this, this.withBundle(UninstallCommand.class)); - uc.setBreakDependent(true); - textParams.add("org.graalvm.native-image"); - - uc.prepareUninstall(); - // broken ruby is recorded - assertFalse(uc.getBrokenDependencies().isEmpty()); - assertEquals(1, uc.getUninstallComponents().size()); - class FD extends FeedbackAdapter { - boolean target; - - @Override - public void error(String key, Throwable t, Object... params) { - fail("No error should be printed"); - } - - @Override - public void output(String bundleKey, Object... params) { - switch (bundleKey) { - case "UNINSTALL_BreakDepSource": - assertEquals("org.graalvm.native-image", params[1]); - break; - - case "UNINSTALL_BreakDepTarget": - target = true; - assertEquals("org.graalvm.ruby", params[1]); - break; - } - } - - } - FD fd = new FD(); - delegateFeedback(fd); - uc.checkBrokenDependencies(); - assertTrue(fd.target); - } - - /** - * Checks that uninstallation of a library with a flag will imply uninstallation of dependents. - * Verifies the order of uninstallation. - */ - @Test - public void testUninstallLibraryImplyDependents() throws Exception { - setupComponentsWithDeps(); - - UninstallCommand uc = new UninstallCommand(); - uc.init(this, this.withBundle(UninstallCommand.class)); - uc.setRemoveDependent(true); - textParams.add("org.graalvm.llvm-toolchain"); - - uc.prepareUninstall(); - // broken ruby is recorded - assertFalse(uc.getBrokenDependencies().isEmpty()); - assertEquals(1, uc.getUninstallComponents().size()); - // however it will not fail the installation - uc.checkBrokenDependencies(); - - uc.includeAndOrderComponents(); - - List comps = uc.getUninstallSequence(); - assertEquals(4, comps.size()); - - // handle possible different ordering of the component removal - int nativeIndex = comps.indexOf(localRegistry.findComponent("org.graalvm.native-image")); - int rubyIndex = comps.indexOf(localRegistry.findComponent("org.graalvm.ruby")); - int rIndex = comps.indexOf(localRegistry.findComponent("org.graalvm.r")); - - // native depends on llvm so llvm must be the last; native may not be the first, as ruby - // depends on it - assertTrue(nativeIndex > 0 && nativeIndex < 3); - assertTrue(rubyIndex < nativeIndex); - assertTrue(rIndex < 3); - assertEquals("org.graalvm.llvm-toolchain", comps.get(3).getId()); - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/UpgradeTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/UpgradeTest.java deleted file mode 100644 index e2a0b5520583..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/UpgradeTest.java +++ /dev/null @@ -1,699 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.UnknownVersionException; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.GraalEdition; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.persist.test.Handler; -import org.graalvm.component.installer.remote.CatalogIterable; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import org.junit.After; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class UpgradeTest extends CommandTestBase { - private UpgradeProcess helper; - private RemoteCatalogDownloader downloader; - - private Version initVersion(String s) throws IOException { - return initVersion(s, "../repo/catalog.properties"); - } - - private Version initVersion(String s, String catalogResource) throws IOException { - Version v = Version.fromString(s); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, s); - Path catalogPath = dataFile(catalogResource); - downloader = new RemoteCatalogDownloader( - this, - this, - catalogPath.toUri().toURL()); - - registry = new CatalogContents(this, downloader.getStorage(), localRegistry); - paramIterable = new CatalogIterable(this, this); - helper = new UpgradeProcess(this, this, registry); - return v; - } - - /** - * Checks situation when no upgrade is available. - */ - @Test - public void testNoUpgrade() throws Exception { - initVersion("1.1.1-0.rc.1"); - ComponentInfo info = helper.findGraalVersion(localRegistry.getGraalVersion().match(Version.Match.Type.INSTALLABLE)); - assertNotNull(info); - assertEquals(localRegistry.getGraalVersion(), info.getVersion()); - assertFalse(helper.prepareInstall(info)); - } - - /** - * Tests "gu upgrade" commandline on a most recent version. - */ - @Test - public void testNoUpgradeCommand() throws Exception { - initVersion("1.1.1-0.rc.1"); - - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - // no upgrade performed. - assertEquals(1, cmd.execute()); - - assertFalse(Files.list(getGraalHomePath().getParent()).anyMatch((fn) -> fn.getFileName().toString().contains("rc.1"))); - } - - @Test - public void testRefuseDowngradeComponentsFail() throws Exception { - initVersion("1.1.0.1"); - ComponentInfo info = helper.findGraalVersion( - Version.fromString("1.0.0.0").match(Version.Match.Type.EXACT)); - assertNull(info); - } - - @Test - public void testRefuseDowngradeFromCommandline() throws Exception { - exception.expect(FailedOperationException.class); - exception.expectMessage("UPGRADE_CannotDowngrade"); - - initVersion("1.1.0.1"); - textParams.add("1.0.0.0"); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - cmd.execute(); - } - - @Test - public void testUpgradeToCompatibleVersion() throws Exception { - initVersion("1.0.0.0"); - textParams.add("1.0.1"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - helper.resetExistingComponents(); - ComponentInfo info = helper.findGraalVersion( - Version.fromString("1.0.1").match(Version.Match.Type.COMPATIBLE)); - assertNotNull(info); - assertEquals("1.0.1.0", info.getVersion().toString()); - } - - /** - * Tests "gu upgrade 1.0.1" on 1.0.1 installation. 1.0.1 core should be installed with ruby - * 1.0.1.1 - */ - @Test - public void testUpgradeToCompatibleVersionCommandline() throws Exception { - initVersion("1.0.0.0"); - textParams.add("1.0.1"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - assertEquals(0, cmd.execute()); - - ComponentRegistry newReg = cmd.getProcess().getNewGraalRegistry(); - ComponentInfo ruby = newReg.findComponent("ruby"); - assertEquals("1.0.1.1", ruby.getVersion().toString()); - } - - @Test - public void testRefuseUpgradeUnsatisfiedComponent() throws Exception { - exception.expect(FailedOperationException.class); - exception.expectMessage("UPGRADE_ComponentsCannotMigrate"); - - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - helper.resetExistingComponents(); - ComponentInfo info = helper.findGraalVersion( - Version.fromString("1.1.0").match(Version.Match.Type.COMPATIBLE)); - assertNotNull(info); - } - - /** - * Checks "gu upgrade 1.1.0". Should fail because ruby is not available in 1.1.x - */ - @Test - public void testRefuseUnsatisfiedCommandline() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - textParams.add("1.1.0"); - storage.installed.add(ci); - - exception.expect(FailedOperationException.class); - exception.expectMessage("UPGRADE_ComponentsCannotMigrate"); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - cmd.execute(); - } - - /** - * Checks "gu upgrade". Should select 1.0.1.0 with ruby 1.0.1.1 since in newer Graals Ruby is - * not available - */ - @Test - public void testUpgradeToNewestAvailable() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - cmd.execute(); - - Version installedGraalVMVersion = cmd.getProcess().getNewGraalRegistry().getGraalVersion(); - Version installedRubyVersion = cmd.getProcess().getNewGraalRegistry().findComponent("ruby").getVersion(); - - assertEquals("1.0.1.0", installedGraalVMVersion.toString()); - assertEquals("1.0.1.1", installedRubyVersion.toString()); - } - - /** - * Ignores unsatisfied component dependency and install the most recent GraalVM version. - */ - @Test - public void testIgnoreUnsatisfiedComponent() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - helper.resetExistingComponents(); - helper.setAllowMissing(true); - ComponentInfo info = helper.findGraalVersion( - Version.fromString("1.1.0").match(Version.Match.Type.COMPATIBLE)); - assertNotNull(info); - assertEquals("1.1.0.1", info.getVersion().toString()); - } - - /** - * Checks "gu upgrade". Should select 1.0.1.0 with ruby 1.0.1.1 since in newer Graals Ruby is - * not available - */ - @Test - public void testIgnoreUnsatisfiedComponentCommandline() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - options.put(Commands.OPTION_IGNORE_MISSING_COMPONENTS, ""); - - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - cmd.execute(); - - Version installedGraalVMVersion = cmd.getProcess().getNewGraalRegistry().getGraalVersion(); - assertEquals("1.1.1-0.rc.1", installedGraalVMVersion.originalString()); - assertNull("Ruby should not be migrated", cmd.getProcess().getNewGraalRegistry().findComponent("ruby")); - } - - /** - * Checks installation without core , even though the user has specified the version. Simulates - * "gu install ruby" on 1.0.1.0 installation which ought to install 1.0.1.1 - */ - @Test - public void testInstallWithoutCoreUpgrade() throws Exception { - initVersion("1.0.1.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.1.0"); - storage.installed.add(ci); - helper.resetExistingComponents(); - - ComponentInfo info = helper.findGraalVersion( - Version.fromString("1.0.1").match(Version.Match.Type.COMPATIBLE)); - assertNotNull(info); - boolean inst = helper.installGraalCore(info); - assertFalse(inst); - } - - /** - * Upgrade command is used to install a new component, but the core is most recent one and need - * not to be upgraded. Component must go to the existing install. - * - * @throws Exception - */ - @Test - public void testInstallNewWithoutCoreUpgrade() throws Exception { - initVersion("1.0.1.0"); - textParams.add("ruby"); - - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - helper = cmd.getProcess(); - - ComponentInfo info = cmd.configureProcess(); - assertNotNull(info); - // will not install core - assertFalse(helper.installGraalCore(info)); - assertNull(helper.getTargetInfo()); - - // found the current graalvm: - assertEquals(getLocalRegistry().getGraalVersion(), info.getVersion()); - List toDownload = helper.allComponents(); - - // no component (e.g. migration) was added, requested ruby is in there - assertEquals(1, toDownload.size()); - assertEquals("org.graalvm.ruby", toDownload.get(0).getShortName()); - } - - /** - * Checks that "gu update r" will only update to a minor update, not to the next major. - * - * @throws Exception - */ - @Test - public void testInstallMinorUpdate() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - - UpgradeCommand cmd = new UpgradeCommand(false); - cmd.init(this, this); - ComponentInfo info = cmd.configureProcess(); - assertFalse(cmd.getProcess().prepareInstall(info)); - } - - @Test - public void testRefuseNonAdminUpgrade() throws Exception { - initVersion("1.0.0.0"); - storage.writableUser = "hero"; // NOI18N - - textParams.add("1.0.1"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - - exception.expect(FailedOperationException.class); - exception.expectMessage("ADMIN"); - - cmd.execute(); - } - - /** - * Checks that the 'components can migrate' check succeed, if an existing component is specified - * for upgrade. - */ - @Test - public void testUpgradeExistingComponent() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - textParams.add("ruby"); - - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - helper = cmd.getProcess(); - - ComponentInfo info = cmd.configureProcess(); - assertNotNull(info); - assertEquals(Version.fromString("1.0.1"), info.getVersion()); - } - - /** - * Fails on non-empty directory. - */ - @Test - public void testInstallIntoExistingNonempty() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - textParams.add("ruby"); - - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - helper = cmd.getProcess(); - - ComponentInfo info = cmd.configureProcess(); - Path p = getGraalHomePath().normalize(); - Path ndir = graalVMDirectory(p, "1.0.1"); - Files.createDirectories(ndir); - Files.write(ndir.resolve("some-content"), Arrays.asList("Fail")); - - exception.expect(FailedOperationException.class); - exception.expectMessage("UPGRADE_TargetExistsNotEmpty"); - helper.prepareInstall(info); - } - - private Path graalVMDirectory(Path sibling, String version) { - return sibling.resolveSibling("graalvm-ce-java" + - getLocalRegistry().getGraalCapabilities().get(CommonConstants.CAP_JAVA_VERSION) + "-" + version); - } - - /** - * Fails on non-empty directory. - */ - @Test - public void testInstallIntoExistingRelease() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - textParams.add("ruby"); - - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - helper = cmd.getProcess(); - - ComponentInfo info = cmd.configureProcess(); - Path p = getGraalHomePath().normalize(); - Path ndir = graalVMDirectory(p, "1.0.1"); - Files.createDirectories(ndir); - Files.write(ndir.resolve("some-content"), Arrays.asList("Fail")); - Path toCopy = dataFile("../persist/release_simple.properties"); - Files.copy(toCopy, ndir.resolve("release")); - - exception.expect(FailedOperationException.class); - exception.expectMessage("UPGRADE_TargetExistsContainsGraalVM"); - helper.prepareInstall(info); - } - - /** - * Allows to install to an empty location. - */ - @Test - public void testInstallIntoExistingEmpty() throws Exception { - initVersion("1.0.0.0"); - ComponentInfo ci = new ComponentInfo("org.graalvm.ruby", "Installed Ruby", "1.0.0.0"); - storage.installed.add(ci); - textParams.add("ruby"); - - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - helper = cmd.getProcess(); - - ComponentInfo info = cmd.configureProcess(); - Path p = getGraalHomePath().normalize(); - Path ndir = graalVMDirectory(p, "1.0.1"); - Files.createDirectories(ndir); - - assertTrue(helper.prepareInstall(info)); - } - - /** - * Tests upgrade to version AT LEAST 1.0.1. - */ - @Test - public void testUpgradePythonMostRecent() throws Exception { - initVersion("1.0.0.0"); - textParams.add("python+1.0.1"); - ComponentInfo ci = new ComponentInfo("org.graalvm.python", "Installed Python", "1.0.0.0"); - storage.installed.add(ci); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - assertEquals(0, cmd.execute()); - - ComponentRegistry newReg = cmd.getProcess().getNewGraalRegistry(); - ComponentInfo python = newReg.findComponent("python"); - assertEquals("1.1.0.0", python.getVersion().toString()); - } - - /** - * Tests upgrade to version EXACTLY 1.0.1. - */ - @Test - public void testUpgradeExact() throws Exception { - initVersion("1.0.0.0"); - textParams.add("python=1.0.1"); - ComponentInfo ci = new ComponentInfo("org.graalvm.python", "Installed Python", "1.0.0.0"); - storage.installed.add(ci); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - assertEquals(0, cmd.execute()); - - ComponentRegistry newReg = cmd.getProcess().getNewGraalRegistry(); - ComponentInfo python = newReg.findComponent("python"); - // note the difference, the user string does not contain trailing .0 - assertEquals("1.0.1", python.getVersion().displayString()); - } - - /** - * Tests upgrade to a next version's RC. - */ - @Test - public void testUpgradeToNextRC() throws Exception { - initVersion("1.0.0.0"); - textParams.add("1.1.1-rc"); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - assertEquals(0, cmd.execute()); - - ComponentRegistry newReg = cmd.getProcess().getNewGraalRegistry(); - assertEquals("1.1.1.0-0.rc.1", newReg.getGraalVersion().toString()); - } - - /** - * Tests NO upgrade to RC when requesting a release. - */ - @Test - public void testNoUpgradeToRCInsteadOfRelease() throws Exception { - initVersion("1.0.0.0"); - textParams.add("1.1.1"); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - try { - cmd.execute(); - } catch (UnknownVersionException ex) { - assertNotNull(ex.getCandidate()); - assertTrue(ex.getCandidate().toString().contains("rc")); - } - } - - /** - * Tests NO upgrade to RC when requesting a release. - */ - @Test - public void testUpgradeIfAllowsNewer() throws Exception { - initVersion("1.0.0.0"); - textParams.add("+1.1.1"); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - assertEquals(0, cmd.execute()); - ComponentRegistry newReg = cmd.getProcess().getNewGraalRegistry(); - assertEquals("1.1.1.0-0.rc.1", newReg.getGraalVersion().toString()); - } - - /** - * Checks that upgrade will install graal of the specified version. - */ - @Test - public void testUpgradeFromDevToSpecificVersion() throws Exception { - initVersion("1.0.0-dev"); - textParams.add("1.0.1"); - textParams.add("python"); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - ComponentInfo graalInfo = cmd.configureProcess(); - assertNotNull(graalInfo); - // check that GraalVM appropriate for 1.0.1 component is selected - assertEquals("1.0.1.0", graalInfo.getVersion().toString()); - assertEquals(1, cmd.getProcess().addedComponents().size()); - ComponentParam p = cmd.getProcess().addedComponents().iterator().next(); - ComponentInfo ci = p.createMetaLoader().getComponentInfo(); - // check that component 1.0.1 will be installed - assertEquals("1.0.1.0", ci.getVersion().toString()); - } - - /** - * Checks that upgrade will install graal for the specific Component. - */ - @Test - public void testUpgradeFromDevToSpecificVersion2() throws Exception { - initVersion("1.0.0-dev"); - textParams.add("python=1.0.1"); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - ComponentInfo graalInfo = cmd.configureProcess(); - assertNotNull(graalInfo); - // check that GraalVM appropriate for 1.0.1 component is selected - assertEquals("1.0.1.0", graalInfo.getVersion().toString()); - assertEquals(1, cmd.getProcess().addedComponents().size()); - ComponentParam p = cmd.getProcess().addedComponents().iterator().next(); - ComponentInfo ci = p.createMetaLoader().getComponentInfo(); - // check that component 1.0.1 will be installed - assertEquals("1.0.1.0", ci.getVersion().toString()); - } - - /** - * Checks that upgrade will install graal for the specific Component. - */ - @Test - public void testUpgradeToSameVersion() throws Exception { - initVersion("1.0.0-dev"); - textParams.add("1.0.0-dev"); - textParams.add("python"); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - ComponentInfo graalInfo = cmd.configureProcess(); - assertNotNull(graalInfo); - // check that GraalVM appropriate for 1.0.1 component is selected - assertEquals("1.0.0-dev", graalInfo.getVersion().displayString()); - assertEquals(1, cmd.getProcess().addedComponents().size()); - ComponentParam p = cmd.getProcess().addedComponents().iterator().next(); - ComponentInfo ci = p.createMetaLoader().getComponentInfo(); - // check that component 1.0.1 will be installed - assertEquals("1.0.0-dev", ci.getVersion().displayString()); - } - - static class InstallTrampoline extends InstallCommand { - - @Override - protected void prepareInstallation() throws IOException { - super.prepareInstallation(); - } - - @Override - protected void executionInit() throws IOException { - super.executionInit(); - } - - } - - CatalogFactory factory; - - @Override - public CatalogFactory getCatalogFactory() { - return factory != null ? factory : super.getCatalogFactory(); - } - - /** - * Upgrade an installation with "ruby" to a newer one, where "ruby" has a dependency on an - * additional component. The other component should be auto-installed. - */ - @Test - public void testUpgradeWithDependencies() throws Exception { - initVersion("1.0.0.0", "../repo/catalog-19.3.properties"); - - ComponentInfo ci = new ComponentInfo("org.graalvm.r", "Installed R", "1.0.0.0"); - storage.installed.add(ci); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - - textParams.add("r"); - ComponentInfo graalInfo = cmd.configureProcess(); - assertNotNull(graalInfo); - assertEquals(Version.fromString("19.3.0.0"), graalInfo.getVersion()); - - boolean installed = cmd.getProcess().installGraalCore(graalInfo); - assertTrue(installed); - - factory = new CatalogFactory() { - @Override - public ComponentCatalog createComponentCatalog(CommandInput in) { - RemoteCatalogDownloader dnl = new RemoteCatalogDownloader(in, UpgradeTest.this, downloader.getOverrideCatalogSpec()); - // carry over the override spec - return new CatalogContents(UpgradeTest.this, dnl.getStorage(), in.getLocalRegistry()); - } - - @Override - public List listEditions(ComponentRegistry targetGraalVM) { - return Collections.emptyList(); - } - }; - - InstallTrampoline targetInstall = new InstallTrampoline(); - cmd.getProcess().configureInstallCommand(targetInstall); - targetInstall.executionInit(); - targetInstall.prepareInstallation(); - - assertTrue(targetInstall.getUnresolvedDependencies().isEmpty()); - List deps = targetInstall.getDependencies(); - assertEquals(1, deps.size()); - MetadataLoader ldr = deps.iterator().next().createFileLoader(); - assertEquals("org.graalvm.llvm-toolchain", ldr.getComponentInfo().getId()); - } - - @Rule public ProxyResource proxyResource = new ProxyResource(); - - @After - public void clearHandlerBindings() { - Handler.clear(); - } - - /** - * The target GraalVM installation may have configured the catalog URLs differently. When - * installing components or dependencies to the target, the target's URLs / release file - * settings should be respected. - * - * @throws Exception - */ - @Test - public void testUpgradeRespectsTargetCatalogURLs() throws Exception { - URL u = SystemUtils.toURL("test://catalog-19.3.properties"); - Handler.bind(u.toString(), dataFile("../repo/catalog-19.3.properties").toUri().toURL()); - - initVersion("1.0.0.0", "../repo/catalog-19.3.properties"); - - ComponentInfo ci = new ComponentInfo("org.graalvm.r", "Installed R", "1.0.0.0"); - storage.installed.add(ci); - UpgradeCommand cmd = new UpgradeCommand(); - cmd.init(this, this); - ComponentInfo graalInfo = cmd.configureProcess(); - boolean installed = cmd.getProcess().installGraalCore(graalInfo); - assertTrue(installed); - factory = new CatalogFactory() { - @Override - public ComponentCatalog createComponentCatalog(CommandInput in) { - RemoteCatalogDownloader dnl = new RemoteCatalogDownloader(in, UpgradeTest.this, (String) null); - return new CatalogContents(UpgradeTest.this, dnl.getStorage(), in.getLocalRegistry()); - } - - @Override - public List listEditions(ComponentRegistry targetGraalVM) { - return Collections.emptyList(); - } - }; - InstallTrampoline targetInstall = new InstallTrampoline(); - cmd.getProcess().configureInstallCommand(targetInstall); - targetInstall.executionInit(); - targetInstall.prepareInstallation(); - - // verify the URL from the target installation was visited. - assertTrue(Handler.isVisited(u)); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/availablePrintAll.golden b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/availablePrintAll.golden deleted file mode 100644 index 98645649fe0c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/availablePrintAll.golden +++ /dev/null @@ -1,8 +0,0 @@ -LIST_ComponentShortListHeader -python 1.0.0-rc3-dev Graal.Python - acme.org -python 1.0.0-rc3-dev Graal.Python - acme.org -R 1.0.0-rc3-dev FastR - acme.org -R 1.0.0-rc3-dev FastR - acme.org -ruby 1.0.0-rc3-dev TruffleRuby - acme.org -ruby 1.0.0-rc3-dev TruffleRuby - acme.org - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalog b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalog deleted file mode 100644 index 73750be71f5c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalog +++ /dev/null @@ -1,12 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalog.rcb1 b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalog.rcb1 deleted file mode 100644 index 00bea9a17e90..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalog.rcb1 +++ /dev/null @@ -1,45 +0,0 @@ -org.graalvm.1.0.0-rc3-dev_darwin_amd64=GraalVM 1.0.0-rc3-dev darwin/amd64 -org.graalvm.1.0.0-rc3-dev_linux_amd64=GraalVM 1.0.0-rc3-dev linux/amd64 - -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.ruby=http://acme.org/graal/components/darwin-amd64/ce/ruby-installable.jar -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.ruby-hash=dd03c98b2080112ceea281f42783512db86f3ef5a940679c6c60514c87de8dd6 -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc3-dev)(os_name=darwin)(os_arch=amd64))" -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.ruby-Bundle-Version=1.0.0-rc3-dev -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.r=http://acme.org/graal/components/darwin-amd64/ce/r-installable.jar -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.r-hash=13f37bd01e7f8f40c9f64dc15f027c53863f8c4cd319564855a25b3bdd1c0b9a -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc3-dev)(os_name=darwin)(os_arch=amd64))" -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.r-Bundle-Version=1.0.0-rc3-dev -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.python=http://acme.org/graal/components/darwin-amd64/ce/python-installable.jar -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.python-hash=278bff9dbfcd73bc0cc2cddf81545feed9bae4e5ead00d3763dfe003da7e4f66 -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc3-dev)(os_name=darwin)(os_arch=amd64))" -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.python-Bundle-Version=1.0.0-rc3-dev -Component.1.0.0-rc3-dev_darwin_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.ruby=http://acme.org/graal/components/linux-amd64/ce/ruby-installable.jar -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.ruby-hash=dfa678d17e1506dd41d051e991cd00b6d0085920db02382e5ca44cda532795bb -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc3-dev)(os_name=linux)(os_arch=amd64))" -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.ruby-Bundle-Version=1.0.0-rc3-dev -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.r=http://acme.org/graal/components/linux-amd64/ce/r-installable.jar -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.r-hash=72c7a4e78bc05c41a15ee5ccfc1e8955cffc4962ca646856d27c1893c2722287 -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc3-dev)(os_name=linux)(os_arch=amd64))" -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.r-Bundle-Version=1.0.0-rc3-dev -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.python=http://acme.org/graal/components/linux-amd64/ce/python-installable.jar -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.python-hash=4965fd622b18f62ff635421f05a307d5bb7ce5930c0204ea49b276b7368226c7 -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc3-dev)(os_name=linux)(os_arch=amd64))" -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.python-Bundle-Version=1.0.0-rc3-dev -Component.1.0.0-rc3-dev_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogInstallTest.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogInstallTest.properties deleted file mode 100644 index 0b3dfb5b0978..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogInstallTest.properties +++ /dev/null @@ -1,21 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -org.graalvm.0.33_linux_amd64: GraalVM 0.33-dev linux amd64 - -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - -Component.0.33_linux_amd64.ruby: postinst2.jar -Component.0.33_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33_linux_amd64.ruby-Bundle-Version: 0.33 -Component.0.33_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogInstallTest2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogInstallTest2.properties deleted file mode 100644 index 0b3dfb5b0978..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogInstallTest2.properties +++ /dev/null @@ -1,21 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -org.graalvm.0.33_linux_amd64: GraalVM 0.33-dev linux amd64 - -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - -Component.0.33_linux_amd64.ruby: postinst2.jar -Component.0.33_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33_linux_amd64.ruby-Bundle-Version: 0.33 -Component.0.33_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogMultiFlavours.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogMultiFlavours.properties deleted file mode 100644 index 6d87be728ad4..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/catalogMultiFlavours.properties +++ /dev/null @@ -1,52 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: ../0.33-dev/graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - - -org.graalvm.linux_amd64/1.0.0.0: GraalVM 1.0 -Component.linux_amd64/1.0.0.0/cafebabe/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.0.0/cafebabe/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.0.0/cafebabe/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.0.0/cafebabe/ruby-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/cafebabe/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(java_version=8)(os_arch=amd64))" - -Component.linux_amd64/1.0.0.0/deadbeef/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.0.0/deadbeef/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.0.0/deadbeef/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.0.0/deadbeef/ruby-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/deadbeef/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(java_version=11)(os_arch=amd64))" - -Component.linux_amd64/1.0.0.0/cafebabe/r: ../1.0.0.0/graalvm-fastr.zip -Component.linux_amd64/1.0.0.0/cafebabe/r-Bundle-Name: FastR -Component.linux_amd64/1.0.0.0/cafebabe/r-Bundle-Symbolic-Name: R -Component.linux_amd64/1.0.0.0/cafebabe/r-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/cafebabe/r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - -org.graalvm.linux_amd64/1.0.1.0: GraalVM 1.0.1 -Component.linux_amd64/1.0.1.0/cafebabe/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.1.0/cafebabe/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/cafebabe/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.1.0/cafebabe/ruby-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/cafebabe/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - - -# Python is intentionally just for version 1.0.1.0 -Component.linux_amd64/1.0.1.0/cafebabe/python: graalvm-python.zip -Component.linux_amd64/1.0.1.0/cafebabe/python-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/cafebabe/python-Bundle-Symbolic-Name: python -Component.linux_amd64/1.0.1.0/cafebabe/python-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/cafebabe/python-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/cataloginstallDeps.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/cataloginstallDeps.properties deleted file mode 100644 index f001c2c7e751..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/cataloginstallDeps.properties +++ /dev/null @@ -1,41 +0,0 @@ -org.graalvm.19.3-dev_linux_amd64: GraalVM 19.3-dev linux amd64 -org.graalvm.19.3_linux_amd64: GraalVM 19.3-dev linux amd64 - -Component.19.3-dev_linux_amd64.org.graalvm.ruby: ruby-deps.jar -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Bundle-Name: TruffleRuby 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name: org.graalvm.ruby -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Require-Bundle: org.graalvm.native-image - -Component.19.3-dev_linux_amd64.org.graalvm.r: r-deps.jar -Component.19.3-dev_linux_amd64.org.graalvm.r-Bundle-Name: FastR 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name: org.graalvm.r -Component.19.3-dev_linux_amd64.org.graalvm.r-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" -Component.19.3-dev_linux_amd64.org.graalvm.r-Require-Bundle: org.graalvm.llvm-toolchain - -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain: llvm-deps.jar -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name: LLVM.org toolchain -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name: org.graalvm.llvm-toolchain -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-ProvideCapability: org.graalvm; edition = "CE" - -Component.19.3-dev_linux_amd64.org.graalvm.native_image: native-image-deps.jar -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Bundle-Name: Native Image -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name: org.graalvm.native-image -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Require-Bundle: org.graalvm.llvm-toolchain -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-ProvideCapability: org.graalvm; edition = "CE"; native_version:Version="19.3" - -Component.19.3-dev_linux_amd64.org.graalvm.additional: additional-19.3.zip -Component.19.3-dev_linux_amd64.org.graalvm.additional-Bundle-Name: Additional Component with undeclared dependency -Component.19.3-dev_linux_amd64.org.graalvm.additional-Bundle-Symbolic-Name: org.graalvm.additional -Component.19.3-dev_linux_amd64.org.graalvm.additional-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.additional-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" -Component.19.3-dev_linux_amd64.org.graalvm.additional-Require-Bundle: org.graalvm.unknown diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/cataloginstallDeps2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/cataloginstallDeps2.properties deleted file mode 100644 index 59d2dcf9cfa4..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/cataloginstallDeps2.properties +++ /dev/null @@ -1,37 +0,0 @@ -org.graalvm.19.3-dev_linux_amd64: GraalVM 19.3-dev linux amd64 -org.graalvm.19.3_linux_amd64: GraalVM 19.3-dev linux amd64 - -Component.19.3-dev_linux_amd64.org.graalvm.ruby: ruby-deps.jar -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Bundle-Name: TruffleRuby 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name: org.graalvm.ruby -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" - -Component.19.3-dev_linux_amd64.org.graalvm.r: r-deps.jar -Component.19.3-dev_linux_amd64.org.graalvm.r-Bundle-Name: FastR 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name: org.graalvm.r -Component.19.3-dev_linux_amd64.org.graalvm.r-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" - -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain: llvm-deps.jar -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name: LLVM.org toolchain -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name: org.graalvm.llvm-toolchain -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-ProvideCapability: org.graalvm; edition = "CE" - -Component.19.3-dev_linux_amd64.org.graalvm.native_image: native-image-deps.jar -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Bundle-Name: Native Image -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name: org.graalvm.native-image -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" -Component.19.3-dev_linux_amd64.org.graalvm.llvm_toolchain-Bundle-ProvideCapability: org.graalvm; edition = "CE"; native_version:Version="19.3" - -Component.19.3-dev_linux_amd64.org.graalvm.additional: additional-19.3.zip -Component.19.3-dev_linux_amd64.org.graalvm.additional-Bundle-Name: Additional Component with undeclared dependency -Component.19.3-dev_linux_amd64.org.graalvm.additional-Bundle-Symbolic-Name: org.graalvm.additional -Component.19.3-dev_linux_amd64.org.graalvm.additional-Bundle-Version: 19.3-dev -Component.19.3-dev_linux_amd64.org.graalvm.additional-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=19.3-dev)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog-19.3.2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog-19.3.2.properties deleted file mode 100644 index 2cd8eeb666a5..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog-19.3.2.properties +++ /dev/null @@ -1,77 +0,0 @@ -# 19.3.2 Release -org.graalvm.19.3.2_macos_amd64=GraalVM 19.3.2 macos/amd64 -org.graalvm.19.3.2_linux_amd64=GraalVM 19.3.2 linux/amd64 - -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain=test://github.com/graalvm/graalvm-ce-builds/releases/download/vm-19.3.2/llvm-toolchain-installable-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-hash=bd236156ba4d47848236a317552d3e8ac11d1f33ee0843f87f65c5f28d59921c -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain=test://github.com/graalvm/graalvm-ce-builds/releases/download/vm-19.3.2/llvm-toolchain-installable-java8-linux-amd64-19.3.2.jar -#Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-hash=c48fa0205b8ef891d11d8f3687851a921ca3a4a9928d5072c8f253cf794eb9de -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.native_image=test://github.com/graalvm/graalvm-ce-builds/releases/download/vm-19.3.2/native-image-installable-svm-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.native_image-hash=c69e039f1f2896881e627df97149436fb587a52a1f2bb469ee094fa5f467f69b -Component.19.3.2_macos_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.19.3.2_macos_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.19.3.2_macos_amd64.org.graalvm.native_image-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.native_image=test://github.com/graalvm/graalvm-ce-builds/releases/download/vm-19.3.2/native-image-installable-svm-java8-linux-amd64-19.3.2.jar -#Component.19.3.2_linux_amd64.org.graalvm.native_image-hash=30b59f3eb84c91d742822ea4f2647e882cd04ed68d97954d60cfb7f84dc71719 -Component.19.3.2_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.19.3.2_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.19.3.2_linux_amd64.org.graalvm.native_image-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.python=test://github.com/graalvm/graalpython/releases/download/vm-19.3.2/python-installable-svm-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.python-hash=1e95d88cac02694dfad97b4da361282e1b8e427732850d3d5db93ac8fddc8d72 -Component.19.3.2_macos_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.19.3.2_macos_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.19.3.2_macos_amd64.org.graalvm.python-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_macos_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.19.3.2_linux_amd64.org.graalvm.python=test://github.com/graalvm/graalpython/releases/download/vm-19.3.2/python-installable-svm-java8-linux-amd64-19.3.2.jar -Component.19.3.2_linux_amd64.org.graalvm.python-hash=0b0404691263ab9ce7c49ea633e82836be80b2fc4caa155b72d1627d1fd48add -Component.19.3.2_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.19.3.2_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.19.3.2_linux_amd64.org.graalvm.python-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.19.3.2_macos_amd64.org.graalvm.r=test://github.com/oracle/fastr/releases/download/vm-19.3.2/r-installable-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.r-hash=d137b2558a96cc2040c334c3ca42ad4670299de97903d34e11744882f0b0af87 -Component.19.3.2_macos_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.19.3.2_macos_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.r-Bundle-Name=FastR -Component.19.3.2_macos_amd64.org.graalvm.r-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_macos_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.19.3.2_linux_amd64.org.graalvm.r=test://github.com/oracle/fastr/releases/download/vm-19.3.2/r-installable-java8-linux-amd64-19.3.2.jar -Component.19.3.2_linux_amd64.org.graalvm.r-hash=9bc18e48c1cd697b37940d9fecf6f0cef0c2c66ea466834e359c5aa17cfdf286 -Component.19.3.2_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.19.3.2_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.19.3.2_linux_amd64.org.graalvm.r-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.19.3.2_macos_amd64.org.graalvm.ruby=test://github.com/oracle/truffleruby/releases/download/vm-19.3.2/ruby-installable-svm-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.ruby-hash=c25515aa7a3ed8937b062887bc6377580351831b12fab87733b14f0388a2a56c -Component.19.3.2_macos_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.19.3.2_macos_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.19.3.2_macos_amd64.org.graalvm.ruby-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_macos_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.19.3.2_linux_amd64.org.graalvm.ruby=test://github.com/oracle/truffleruby/releases/download/vm-19.3.2/ruby-installable-svm-java8-linux-amd64-19.3.2.jar -Component.19.3.2_linux_amd64.org.graalvm.ruby-hash=ab0f4c915dade7772206f97589a5a94776cd597d7c4f6b6d8997fedc13cf0c47 -Component.19.3.2_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.19.3.2_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.19.3.2_linux_amd64.org.graalvm.ruby-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog-20.3.0.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog-20.3.0.properties deleted file mode 100644 index 201562b2ac28..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog-20.3.0.properties +++ /dev/null @@ -1,11 +0,0 @@ -# 19.3.2 Release -org.graalvm.19.3.2_macos_amd64=GraalVM 19.3.2 macos/amd64 -org.graalvm.19.3.2_linux_amd64=GraalVM 19.3.2 linux/amd64 - -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain=./dummylang -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.dummylang -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Name=Dummy Language -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Version=20.3.0 - - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog21patch.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog21patch.properties deleted file mode 100644 index f13b792c907b..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/catalog21patch.properties +++ /dev/null @@ -1,310 +0,0 @@ -# The file was originally downloaded from https://github.com/graalvm -# - -org.graalvm.20.3.0_macos_amd64=GraalVM 20.3.0 macos/amd64 -org.graalvm.20.3.0_linux_amd64=GraalVM 20.3.0 linux/amd64 -org.graalvm.20.3.0_windows_amd64=GraalVM 20.3.0 windows/amd64 - -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/llvm-toolchain-installable-java8-linux-amd64-20.3.0.jar -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-hash=3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7 -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version=20.3.0 - -Component.20.3.0_linux_amd64.org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/native-image-installable-svm-java8-linux-amd64-20.3.0.jar -Component.20.3.0_linux_amd64.org.graalvm.native_image-hash=23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7 -Component.20.3.0_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.20.3.0_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.0_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.20.3.0_linux_amd64.org.graalvm.native_image-Bundle-Version=20.3.0 - -Component.20.3.0_linux_amd64.org.graalvm.python=https://github.com/graalvm/graalpython/releases/download/vm-20.3.0/python-installable-svm-java8-linux-amd64-20.3.0.jar -Component.20.3.0_linux_amd64.org.graalvm.python-hash=e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7 -Component.20.3.0_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.20.3.0_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.0_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.20.3.0_linux_amd64.org.graalvm.python-Bundle-Version=20.3.0 -Component.20.3.0_linux_amd64.org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.20.3.0_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.20.3.0_linux_amd64.org.graalvm.r=https://github.com/oracle/fastr/releases/download/vm-20.3.0/r-installable-java8-linux-amd64-20.3.0.jar -Component.20.3.0_linux_amd64.org.graalvm.r-hash=25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc -Component.20.3.0_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.20.3.0_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.0_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.20.3.0_linux_amd64.org.graalvm.r-Bundle-Version=20.3.0 -Component.20.3.0_linux_amd64.org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.20.3.0_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.20.3.0_linux_amd64.org.graalvm.ruby=https://github.com/oracle/truffleruby/releases/download/vm-20.3.0/ruby-installable-svm-java8-linux-amd64-20.3.0.jar -Component.20.3.0_linux_amd64.org.graalvm.ruby-hash=cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d -Component.20.3.0_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.20.3.0_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.0_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.20.3.0_linux_amd64.org.graalvm.ruby-Bundle-Version=20.3.0 -Component.20.3.0_linux_amd64.org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.20.3.0_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -Component.20.3.0_linux_amd64.org.graalvm.wasm=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/wasm-installable-svm-java8-linux-amd64-20.3.0.jar -Component.20.3.0_linux_amd64.org.graalvm.wasm-hash=98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a -Component.20.3.0_linux_amd64.org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.20.3.0_linux_amd64.org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.0_linux_amd64.org.graalvm.wasm-Bundle-Name=GraalWasm -Component.20.3.0_linux_amd64.org.graalvm.wasm-Bundle-Version=20.3.0 -Component.20.3.0_linux_amd64.org.graalvm.wasm-x-GraalVM-Working-Directories=jre/languages/wasm - -# 20.3.1 Release -org.graalvm.20.3.1_macos_amd64=GraalVM 20.3.1 macos/amd64 -org.graalvm.20.3.1_linux_amd64=GraalVM 20.3.1 linux/amd64 -org.graalvm.20.3.1_windows_amd64=GraalVM 20.3.1 windows/amd64 - -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.1/llvm-toolchain-installable-java8-darwin-amd64-20.3.1.jar -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain-hash=64a11d23a49396f15181ee534dccab58710c197bc6657f7438086f28bb07c0b3 -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.1)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Version=20.3.1 -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain-x-GraalVM-Stability=supported -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain-Created-By=1.8.0_91 (Oracle Corporation) -Component.20.3.1_macos_amd64.org.graalvm.llvm_toolchain-Manifest-Version=1.0 -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.1/llvm-toolchain-installable-java8-linux-amd64-20.3.1.jar -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain-hash=0d81247ee2b6a0fb6c47cfdb56c7eec09a86b395f7888ff0d504c62695c19aa7 -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.1)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version=20.3.1 -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain-x-GraalVM-Stability=supported -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain-Created-By=1.8.0_91 (Oracle Corporation) -Component.20.3.1_linux_amd64.org.graalvm.llvm_toolchain-Manifest-Version=1.0 - -Component.20.3.1_linux_amd64.org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.1/native-image-installable-svm-java8-linux-amd64-20.3.1.jar -Component.20.3.1_linux_amd64.org.graalvm.native_image-hash=efd86f9dc5dadffe1c2d8deb0abee6954a2fa31d74e9f284d5218a403825d090 -Component.20.3.1_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.20.3.1_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.1)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.1_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.20.3.1_linux_amd64.org.graalvm.native_image-Bundle-Version=20.3.1 -Component.20.3.1_linux_amd64.org.graalvm.native_image-x-GraalVM-Stability=earlyadopter -Component.20.3.1_linux_amd64.org.graalvm.native_image-Created-By=1.8.0_91 (Oracle Corporation) -Component.20.3.1_linux_amd64.org.graalvm.native_image-Manifest-Version=1.0 - - -# 20.3.1.2 Release -org.graalvm.20.3.1.2_macos_amd64=GraalVM 20.3.1.2 macos/amd64 -org.graalvm.20.3.1.2_linux_amd64=GraalVM 20.3.1.2 linux/amd64 -org.graalvm.20.3.1.2_windows_amd64=GraalVM 20.3.1.2 windows/amd64 - -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.1.2/llvm-toolchain-installable-java8-linux-amd64-20.3.1.2.jar -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain-hash=ee711f90ec8ca14830ad52159ae4bd36ecf4fa7d7ae9f687b04ebfcb481b3200 -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.1.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version=20.3.1.2 -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain-x-GraalVM-Stability=supported -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain-Created-By=1.8.0_91 (Oracle Corporation) -Component.20.3.1.2_linux_amd64.org.graalvm.llvm_toolchain-Manifest-Version=1.0 - -Component.20.3.1.2_linux_amd64.org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.1.2/native-image-installable-svm-java8-linux-amd64-20.3.1.2.jar -Component.20.3.1.2_linux_amd64.org.graalvm.native_image-hash=42cb5e3fb6f9098ceb7d76731e7e510ff626c968f6d972b24cb28e86cfb66b10 -Component.20.3.1.2_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.20.3.1.2_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.1.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.1.2_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.20.3.1.2_linux_amd64.org.graalvm.native_image-Bundle-Version=20.3.1.2 -Component.20.3.1.2_linux_amd64.org.graalvm.native_image-x-GraalVM-Stability=earlyadopter -Component.20.3.1.2_linux_amd64.org.graalvm.native_image-Created-By=1.8.0_91 (Oracle Corporation) -Component.20.3.1.2_linux_amd64.org.graalvm.native_image-Manifest-Version=1.0 - -org.graalvm.20.3.1.3_macos_amd64=GraalVM 20.3.1.3 macos/amd64 -org.graalvm.20.3.1.3_linux_amd64=GraalVM 20.3.1.3 linux/amd64 -org.graalvm.20.3.1.3_windows_amd64=GraalVM 20.3.1.3 windows/amd64 - - -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.1.3/llvm-toolchain-installable-java8-linux-amd64-20.3.1.3.jar -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain-hash=ee711f90ec8ca14830ad52159ae4bd36ecf4fa7d7ae9f687b04ebfcb481b3200 -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.1.3)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain-Bundle-Version=20.3.1.3 -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain-x-GraalVM-Stability=supported -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/20.3.1.3/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.llvm_toolchain-Manifest-Version=1.0 - -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.1.3/native-image-installable-svm-java8-linux-amd64-20.3.1.3.jar -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image-hash=42cb5e3fb6f9098ceb7d76731e7e510ff626c968f6d972b24cb28e86cfb66b10 -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.1.3)(os_name=linux)(os_arch=amd64)(java_version=8))" -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image-Bundle-Version=20.3.1.3 -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image-x-GraalVM-Stability=earlyadopter -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image-Created-By=1.8.0_91 (Oracle Corporation) -#Component.20.3.1.3_linux_amd64.org.graalvm.native_image-Manifest-Version=1.0 - -# 21.0.0 Release -org.graalvm.macos_amd64/21.0.0.0=GraalVM 21.0.0.0 macos/amd64 -org.graalvm.linux_amd64/21.0.0.0=GraalVM 21.0.0.0 linux/amd64 -org.graalvm.windows_amd64/21.0.0.0=GraalVM 21.0.0.0 windows/amd64 - -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso=https://localhost/do-not-use/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0/espresso-installable-java8-linux-amd64-21.0.0.jar -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-hash=a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0 -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-Bundle-Symbolic-Name=org.graalvm.espresso -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-Bundle-Name=Java on Truffle -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-Bundle-Version=21.0.0 -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-x-GraalVM-Working-Directories=jre/languages/java -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-Created-By=1.8.0_162 (Oracle Corporation) -Component.linux_amd64/21.0.0.0/a4a4d5f99097b4282e1064b998348df73d90e104effd1aae5449ed6bb675ddc0/org.graalvm.espresso-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain=https://localhost/do-not-use/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0/llvm-toolchain-installable-java8-linux-amd64-21.0.0.jar -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain-hash=fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7 -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain-Bundle-Version=21.0.0 -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain-x-GraalVM-Stability=supported -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.0/fcfa25d4857af0a43893c30c9186b6d4c637fa86a796907e3c97ef9375cfc7b7/org.graalvm.llvm_toolchain-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image=https://localhost/do-not-use/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0/native-image-installable-svm-java8-linux-amd64-21.0.0.jar -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image-hash=8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842 -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image-Bundle-Name=Native Image -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image-Bundle-Version=21.0.0 -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image-x-GraalVM-Stability=earlyadopter -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.0/8f6976b2a9a40d35df50402a3e893af41a6a6bc01301851a91672106d313f842/org.graalvm.native_image-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python=https://localhost/do-not-use/oracle/graalpython/releases/download/vm-21.0.0/python-installable-svm-java8-linux-amd64-21.0.0.jar -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-hash=212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6 -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-Bundle-Version=21.0.0 -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.0/212dff312cdc2946e5a629714b2da0a540c966567a80b4df76ba66591cb1a7a6/org.graalvm.python-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r=https://localhost/do-not-use/oracle/fastr/releases/download/vm-21.0.0/r-installable-java8-linux-amd64-21.0.0.jar -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-hash=5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9 -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-Bundle-Version=21.0.0 -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.0/5a677dcd6b04d313a23fdd75bd91a705c55a127fe124adfea703e2771296aeb9/org.graalvm.r-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby=https://localhost/do-not-use/oracle/truffleruby/releases/download/vm-21.0.0/ruby-installable-svm-java8-linux-amd64-21.0.0.jar -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-hash=83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788 -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-Bundle-Version=21.0.0 -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.0/83fcbc90248f5381cc95fefdd991c2854ff0e0e334782796b418fefaf4455788/org.graalvm.ruby-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm=https://localhost/do-not-use/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0/wasm-installable-svm-java8-linux-amd64-21.0.0.jar -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-hash=6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36 -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-Bundle-Name=GraalWasm -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-Bundle-Version=21.0.0 -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-x-GraalVM-Working-Directories=jre/languages/wasm -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.0/6501ce36f0c50b76d0b392af325e90a60cf40664c09ab97eca09c53ccd5b8f36/org.graalvm.wasm-Manifest-Version=1.0 - -# 21.0.0.2 Release -# 21.0.0.2 entry intentionally commented out -#org.graalvm.macos_amd64/21.0.0.2=GraalVM 21.0.0.2 macos/amd64 -#org.graalvm.linux_amd64/21.0.0.2=GraalVM 21.0.0.2 linux/amd64 -#org.graalvm.windows_amd64/21.0.0.2=GraalVM 21.0.0.2 windows/amd64 - -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso=https://localhost/do-not-use/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0.2/espresso-installable-java8-linux-amd64-21.0.0.2.jar -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-hash=21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976 -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-Bundle-Symbolic-Name=org.graalvm.espresso -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-Bundle-Name=Java on Truffle -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-Bundle-Version=21.0.0.2 -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-x-GraalVM-Working-Directories=jre/languages/java -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.2/21aff622b4b97438f01f0bbd8be0c34f7ec6b546f8caa4d683a2bf25fef46976/org.graalvm.espresso-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain=https://localhost/do-not-use/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0.2/llvm-toolchain-installable-java8-linux-amd64-21.0.0.2.jar -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain-hash=9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794 -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain-Bundle-Version=21.0.0.2 -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain-x-GraalVM-Stability=supported -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.2/9125760257f3ddb5a5118f2ec854069ab1731b3689139611c73b6b00d32f8794/org.graalvm.llvm_toolchain-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image=https://localhost/do-not-use/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0.2/native-image-installable-svm-java8-linux-amd64-21.0.0.2.jar -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image-hash=e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image-Bundle-Name=Native Image -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image-Bundle-Version=21.0.0.2 -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image-x-GraalVM-Stability=earlyadopter -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.2/e2a182c1f79d8a97b537b843eb65e15ef5ebdd088ad01acd606bf26b1846612e/org.graalvm.native_image-Manifest-Version=1.0 - -# For Python patch, allow to cooperate with an older release: - -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python=https://localhost/do-not-use/oracle/graalpython/releases/download/vm-21.0.0.2/python-installable-svm-java8-linux-amd64-21.0.0.2.jar -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-hash=842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1 -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-Bundle-Version=21.0.0.2 -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.2/842c1e376a3d78700f131baf5883b654d04b1ca7503740e97436c1572ba6c4b1/org.graalvm.python-Manifest-Version=1.0 - -# Do not distribute R -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r=https://localhost/do-not-use/oracle/fastr/releases/download/vm-21.0.0.2/r-installable-java8-linux-amd64-21.0.0.2.jar -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-hash=488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-Bundle-Name=FastR -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-Bundle-Version=21.0.0.2 -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-x-GraalVM-Stability=experimental -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-Created-By=1.8.0_91 (Oracle Corporation) -#Component.linux_amd64/21.0.0.2/488b0357e183fcbf78c2f64da944778d61b8d4e3e68213fe6d0b80937618742b/org.graalvm.r-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby=https://localhost/do-not-use/oracle/truffleruby/releases/download/vm-21.0.0.2/ruby-installable-svm-java8-linux-amd64-21.0.0.2.jar -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-hash=6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-Bundle-Version=21.0.0.2 -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.2/6f952d0b68e3b38f24c66f1368d752869fafd8cb1ce1c4a7260d738905b25e7e/org.graalvm.ruby-Manifest-Version=1.0 - -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm=https://localhost/do-not-use/graalvm/graalvm-ce-builds/releases/download/vm-21.0.0.2/wasm-installable-svm-java8-linux-amd64-21.0.0.2.jar -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-hash=bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939 -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=21.0.0.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-Bundle-Name=GraalWasm -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-Bundle-Version=21.0.0.2 -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-x-GraalVM-Stability=experimental -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-x-GraalVM-Working-Directories=jre/languages/wasm -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-Created-By=1.8.0_91 (Oracle Corporation) -Component.linux_amd64/21.0.0.2/bb90889bf73c3f9a937dde0af1e1b6fc7389ec3f61370511cac6849811f53939/org.graalvm.wasm-Manifest-Version=1.0 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/graalvm-20.2-with-updates.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/graalvm-20.2-with-updates.properties deleted file mode 100644 index 5ffe69dd347d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/graalvm-20.2-with-updates.properties +++ /dev/null @@ -1,170 +0,0 @@ -org.graalvm.macos_amd64/20.3.0.0=GraalVM 20.3.0.0 macos/amd64 -org.graalvm.windows_amd64/20.3.0.0=GraalVM 20.3.0.0 windows/amd64 -org.graalvm.linux_aarch64/20.3.0.0=GraalVM 20.3.0.0 linux/aarch64 -org.graalvm.linux_amd64/20.3.0.0=GraalVM 20.3.0.0 linux/amd64 - -# Foged up 20.2.0 core -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm=./graalvm-linux-ce-java11-20.2.0.jar -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-hash=db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Version=20.2.0 - -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm=./graalvm-linux-ce-java11-20.3.0.jar -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-hash=db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm=./graalvm-linux-ce-java8-20.3.0.jar -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-hash=9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-Bundle-Version=20.3.0 - -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/llvm-toolchain-installable-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-hash=31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/llvm-toolchain-installable-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-hash=3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7 -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/native-image-installable-svm-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-hash=6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726 -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-Bundle-Name=Native Image -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/native-image-installable-svm-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-hash=23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7 -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-Bundle-Name=Native Image -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python=https://github.com/graalvm/graalpython/releases/download/vm-20.3.0/python-installable-svm-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-hash=7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-x-GraalVM-Working-Directories=languages/python -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python=https://github.com/graalvm/graalpython/releases/download/vm-20.3.0/python-installable-svm-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-hash=e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7 -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r=https://github.com/oracle/fastr/releases/download/vm-20.3.0/r-installable-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-hash=79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1 -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-x-GraalVM-Working-Directories=languages/R -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r=https://github.com/oracle/fastr/releases/download/vm-20.3.0/r-installable-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-hash=25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby=https://github.com/oracle/truffleruby/releases/download/vm-20.3.0/ruby-installable-svm-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-hash=876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-x-GraalVM-Working-Directories=languages/ruby -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby=https://github.com/oracle/truffleruby/releases/download/vm-20.3.0/ruby-installable-svm-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-hash=cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/wasm-installable-svm-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-hash=13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9 -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-Bundle-Name=GraalWasm -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-x-GraalVM-Working-Directories=languages/wasm -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/wasm-installable-svm-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-hash=98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-Bundle-Name=GraalWasm -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-x-GraalVM-Working-Directories=jre/languages/wasm -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python=https://github.com/graalvm/graalpython/releases/download/vm-20.3.0/python-installable-svm-java8-darwin-amd64-20.3.0.jar -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-hash=874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122 -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Bundle-Name=Graal.Python -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Bundle-Version=20.3.0 -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - - -# 20.2.0 Release -org.graalvm.20.2.0_macos_amd64=GraalVM 20.2.0 macos/amd64 -org.graalvm.20.2.0_linux_amd64=GraalVM 20.2.0 linux/amd64 -org.graalvm.20.2.0_windows_amd64=GraalVM 20.2.0 windows/amd64 - -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/llvm-toolchain-installable-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-hash=a02e6554e1211cff5b635c728d74b91ad18165058d3175004079be1412cf04c9 -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/native-image-installable-svm-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.native_image-hash=6b5403e27282847acce180f0ae9637c3f26678f27047bbd5dfed92a5bef73ab2 -Component.20.2.0_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.20.2.0_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.20.2.0_linux_amd64.org.graalvm.native_image-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.python=https://github.com/graalvm/graalpython/releases/download/vm-20.2.0/python-installable-svm-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.python-hash=ff050939c8abf5827928c9b17800e6e153eb1bc57a81b9f4e579ef87c5b94856 -Component.20.2.0_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.20.2.0_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.20.2.0_linux_amd64.org.graalvm.python-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.20.2.0_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.20.2.0_linux_amd64.org.graalvm.r=https://github.com/oracle/fastr/releases/download/vm-20.2.0/r-installable-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.r-hash=fdd3b3124b57a66d50556e55f68c39e23a42743afe0010987768149ba93b86b4 -Component.20.2.0_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.20.2.0_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.20.2.0_linux_amd64.org.graalvm.r-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.20.2.0_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.20.2.0_linux_amd64.org.graalvm.ruby=https://github.com/oracle/truffleruby/releases/download/vm-20.2.0/ruby-installable-svm-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.ruby-hash=5ec06f17f908d1a5eacf93019505d755ce128081f3bc0eca02d4ba59c3dc9c67 -Component.20.2.0_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.20.2.0_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.20.2.0_linux_amd64.org.graalvm.ruby-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.20.2.0_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.20.2.0_linux_amd64.org.graalvm.wasm=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/wasm-installable-svm-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.wasm-hash=c6ac9cd98de8685ea913d07ebce59fc901104c02a7683e08641ef933ab6227af -Component.20.2.0_linux_amd64.org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.20.2.0_linux_amd64.org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.wasm-Bundle-Name=GraalWasm -Component.20.2.0_linux_amd64.org.graalvm.wasm-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.wasm-x-GraalVM-Working-Directories=jre/languages/wasm diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/graalvmee-20.2-with-updates.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/graalvmee-20.2-with-updates.properties deleted file mode 100644 index befe2b68cec7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/graalvmee-20.2-with-updates.properties +++ /dev/null @@ -1,154 +0,0 @@ -org.graalvm.macos_amd64/20.3.0.0=GraalVM 20.3.0.0 macos/amd64 -org.graalvm.windows_amd64/20.3.0.0=GraalVM 20.3.0.0 windows/amd64 -org.graalvm.linux_aarch64/20.3.0.0=GraalVM 20.3.0.0 linux/aarch64 -org.graalvm.linux_amd64/20.3.0.0=GraalVM 20.3.0.0 linux/amd64 - -# Foged up 20.2.0 core -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm=./graalvm-linux-ce-java11-20.2.0.jar -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-hash=db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/20.2.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Version=20.2.0 - -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm=./graalvm-linux-ce-java11-20.3.0.jar -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-hash=db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/20.3.0.0/db126634379452efd7e47d6fdc47a56693eb326afb1def6dae1fba1c7a2ac2ae/org.graalvm-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm=./graalvm-linux-ce-java8-20.3.0.jar -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-hash=9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/20.3.0.0/9894f6a6b3fab9624f5b658ce37c06cbd79041716a2247f48b0575bffa82ceea/org.graalvm-Bundle-Version=20.3.0 - -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/llvm-toolchain-installable-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-hash=31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.linux_amd64/20.3.0.0/31c27fc00adcb17b6eea5d9cf5952bee43b4fdb8c43808bb98b4925916b2470d/org.graalvm.llvm_toolchain-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/llvm-toolchain-installable-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-hash=3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7 -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.linux_amd64/20.3.0.0/3c2a58c66c789768bbbb5e420bde73e5d593144311365c1da5f15b7aeea05ba7/org.graalvm.llvm_toolchain-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/native-image-installable-svm-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-hash=6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726 -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-Bundle-Name=Native Image -Component.linux_amd64/20.3.0.0/6e67f3c5cc329956fe9bc33d571c2e771eff8f4f541bca275bb62744026d3726/org.graalvm.native_image-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/native-image-installable-svm-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-hash=23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7 -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-Bundle-Name=Native Image -Component.linux_amd64/20.3.0.0/23c4d1d7845d5113971fe5b9173eaa244f0f514a9b806191bea523f12985ebe7/org.graalvm.native_image-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python=https://github.com/graalvm/graalpython/releases/download/vm-20.3.0/python-installable-svm-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-hash=7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/7feeea85cba558266561aadf09068fcb4ef6b0444622beecb3eb6721f4136f8d/org.graalvm.python-x-GraalVM-Working-Directories=languages/python -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python=https://github.com/graalvm/graalpython/releases/download/vm-20.3.0/python-installable-svm-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-hash=e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7 -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/e4ecee04a4b47c81444df63f3e7b1f80e0149dde928627126690f29ce1ac53c7/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r=https://github.com/oracle/fastr/releases/download/vm-20.3.0/r-installable-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-hash=79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1 -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/79d129d572563fe7179009d162160557444b0f7e0b4dbf460d0ba25ca65a63b1/org.graalvm.r-x-GraalVM-Working-Directories=languages/R -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r=https://github.com/oracle/fastr/releases/download/vm-20.3.0/r-installable-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-hash=25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/25aa20f6ed3190f18a328a31ca78c27bbeaaf19f1555e8fd30c84c2d2f21b5bc/org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby=https://github.com/oracle/truffleruby/releases/download/vm-20.3.0/ruby-installable-svm-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-hash=876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/876932cbb9a34a0a10d7c014aef23047a7367fa58405ee1f200f731ac521694d/org.graalvm.ruby-x-GraalVM-Working-Directories=languages/ruby -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby=https://github.com/oracle/truffleruby/releases/download/vm-20.3.0/ruby-installable-svm-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-hash=cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.linux_amd64/20.3.0.0/cdb0bd76394fe75cc9caf53ad20f30cda8b166def5d90ce5881ed2b509d9286d/org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/wasm-installable-svm-java11-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-hash=13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9 -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=11))" -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-Bundle-Name=GraalWasm -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/13cf6fee93313beee36fd9d3ab4e627b05855e142a4172d228dc70efe5731fe9/org.graalvm.wasm-x-GraalVM-Working-Directories=languages/wasm -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.3.0/wasm-installable-svm-java8-linux-amd64-20.3.0.jar -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-hash=98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-Bundle-Name=GraalWasm -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-Bundle-Version=20.3.0 -Component.linux_amd64/20.3.0.0/98baea8ebff1de6fe7a891922e06695ac6e88f62b815de07e465b0ba03659b8a/org.graalvm.wasm-x-GraalVM-Working-Directories=jre/languages/wasm -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python=https://github.com/graalvm/graalpython/releases/download/vm-20.3.0/python-installable-svm-java8-darwin-amd64-20.3.0.jar -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-hash=874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122 -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Bundle-Name=Graal.Python -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Bundle-Version=20.3.0 -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.macos_amd64/20.3.0.0/874981500a64418e45f89ef06eff3624506a8c8b7e4ebf6cf5bce8834758f122/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - - -# 20.2.0 Release -org.graalvm.20.2.0_macos_amd64=GraalVM 20.2.0 macos/amd64 -org.graalvm.20.2.0_linux_amd64=GraalVM 20.2.0 linux/amd64 -org.graalvm.20.2.0_windows_amd64=GraalVM 20.2.0 windows/amd64 - -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/llvm-toolchain-installable-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-hash=a02e6554e1211cff5b635c728d74b91ad18165058d3175004079be1412cf04c9 -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.20.2.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.native_image=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/native-image-installable-svm-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.native_image-hash=6b5403e27282847acce180f0ae9637c3f26678f27047bbd5dfed92a5bef73ab2 -Component.20.2.0_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.20.2.0_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.20.2.0_linux_amd64.org.graalvm.native_image-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.ruby=https://github.com/oracle/truffleruby/releases/download/vm-20.2.0/ruby-installable-svm-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.ruby-hash=5ec06f17f908d1a5eacf93019505d755ce128081f3bc0eca02d4ba59c3dc9c67 -Component.20.2.0_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.20.2.0_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.20.2.0_linux_amd64.org.graalvm.ruby-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.20.2.0_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.20.2.0_linux_amd64.org.graalvm.wasm=https://github.com/graalvm/graalvm-ce-builds/releases/download/vm-20.2.0/wasm-installable-svm-java8-linux-amd64-20.2.0.jar -Component.20.2.0_linux_amd64.org.graalvm.wasm-hash=c6ac9cd98de8685ea913d07ebce59fc901104c02a7683e08641ef933ab6227af -Component.20.2.0_linux_amd64.org.graalvm.wasm-Bundle-Symbolic-Name=org.graalvm.wasm -Component.20.2.0_linux_amd64.org.graalvm.wasm-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.2.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.2.0_linux_amd64.org.graalvm.wasm-Bundle-Name=GraalWasm -Component.20.2.0_linux_amd64.org.graalvm.wasm-Bundle-Version=20.2.0 -Component.20.2.0_linux_amd64.org.graalvm.wasm-x-GraalVM-Working-Directories=jre/languages/wasm diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/license.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/license.txt deleted file mode 100644 index 6a0785d9ed12..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/license.txt +++ /dev/null @@ -1 +0,0 @@ -License -- dummy testing license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/llvm-deps-19.3.2.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/llvm-deps-19.3.2.jar deleted file mode 100644 index aa62ec1cd74b..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/llvm-deps-19.3.2.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/native-image-deps-19.3.2.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/native-image-deps-19.3.2.jar deleted file mode 100644 index 19496b2caaab..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/native-image-deps-19.3.2.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/release21ceWithEE.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/release21ceWithEE.properties deleted file mode 100644 index 047d8c250b57..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/release21ceWithEE.properties +++ /dev/null @@ -1,15 +0,0 @@ -JAVA_VERSION="1.8.0_272" -OS_NAME="Linux" -OS_VERSION="2.6" -OS_ARCH="amd64" -SOURCE=" jvmci:0bbce9bf3339 compiler:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 graal-js:b53c4e144b5909876b377e31be69e3b3f381ae0b graal-nodejs:b53c4e144b5909876b377e31be69e3b3f381ae0b java-benchmarks:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 regex:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sdk:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sulong:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 tools:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 truffle:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438" -GRAALVM_VERSION="20.2.0" -COMMIT_INFO={"compiler": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "graal-js": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "graal-nodejs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "java-benchmarks": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "regex": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sdk": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sulong": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "tools": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "truffle": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}} - -component_catalog_url=test://www.graalvm.org/graalvm-20.2-with-updates.properties -component_catalog_label=GitHub CE Components -component_catalog_editionLabel=GraalVM CE - -ee_component_catalog_10_url=test://www.graalvm.org/graalvmee-20.2-with-updates.properties -ee_component_catalog_10_label=GitHub EE Components -ee_component_catalog_editionLabel=GraalVM EE diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/releases.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/releases.json deleted file mode 100644 index edd43b610f18..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/data/releases.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "Releases": { - "19.3.3-ee-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.3 on jdk8", - "license": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "19.3.3", - "catalog": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_3/19_3_3_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-windows-amd64-19.3.3.zip" - } - } - }, - "19.3.3-ee-jdk11": { - "name": "GraalVM Enterprise Edition 19.3.3 on jdk11", - "license": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk11", - "version": "19.3.3", - "catalog": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_3/19_3_3_EE_Java11_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-windows-amd64-19.3.3.zip" - } - } - }, - "19.3.2-ee-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "19.3.2", - "catalog": "catalog-19.3.2.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-linux-amd64-19.3.2.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-windows-amd64-19.3.2.zip" - } - } - }, - "19.3.2-ee-jdk11": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk11", - "license": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk11", - "version": "19.3.2", - "catalog": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_2/19.3.2_EE_Java11_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-linux-amd64-19.3.2.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "test://oca.opensource.oracle.com/gds/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-windows-amd64-19.3.2.zip" - } - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/graalvm-fastr.zip b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/graalvm-fastr.zip deleted file mode 100644 index 9a7d85a0a2d5..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/graalvm-fastr.zip and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/graalvm-ruby.zip b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/graalvm-ruby.zip deleted file mode 100644 index 0d7c1f429df1..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/graalvm-ruby.zip and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.python/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.python/META-INF/MANIFEST.MF deleted file mode 100644 index 58ebd2e1afa1..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.python/META-INF/MANIFEST.MF +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.python -Bundle-Name: GraalPython -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=19.3.3)(os_arch=amd64))" -x-GraalVM-License-Type: Python License -x-GraalVM-License-Path: license.txt diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.python/license.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.python/license.txt deleted file mode 100644 index 647650e15028..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.python/license.txt +++ /dev/null @@ -1 +0,0 @@ -Testing Python license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/META-INF/MANIFEST.MF deleted file mode 100644 index df3521b06803..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/META-INF/MANIFEST.MF +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=19.3.3)(os_arch=amd64))" -x-GraalVM-License-Type: Testing License -x-GraalVM-License-Path: license.txt diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/jre/languages/ruby/LICENCE.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/jre/languages/ruby/LICENCE.md deleted file mode 100644 index 3b94ae810e9b..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/jre/languages/ruby/LICENCE.md +++ /dev/null @@ -1,12 +0,0 @@ -# TruffleRuby Licence - -TruffleRuby is copyright (c) 2013-2017 Oracle and/or its -affiliates, and is made available to you under the terms of three licenses: - -* Eclipse Public License version 1.0 -* GNU General Public License version 2 -* GNU Lesser General Public License version 2.1 - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/jre/languages/ruby/README.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/jre/languages/ruby/README.md deleted file mode 100644 index 9cec298cd331..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/jre/languages/ruby/README.md +++ /dev/null @@ -1,134 +0,0 @@ -![TruffleRuby logo](logo/png/truffleruby_logo_horizontal_medium.png) - -A high performance implementation of the Ruby programming language. Built on the -GraalVM by [Oracle Labs](https://labs.oracle.com). - -## Authors - -The main authors of TruffleRuby in order of joining the project are: - -* Chris Seaton -* Benoit Daloze -* Kevin Menard -* Petr Chalupa -* Brandon Fish -* Duncan MacGregor - -Additionally: - -* Thomas Würthinger -* Matthias Grimmer -* Josef Haider -* Fabio Niephaus -* Matthias Springer -* Lucas Allan Amorim -* Aditya Bhardwaj - -Collaborations with: - -* [Institut für Systemsoftware at Johannes Kepler University - Linz](http://ssw.jku.at) - -And others. - -The best way to get in touch with us is to join us in -https://gitter.im/graalvm/truffleruby, but you can also Tweet to @chrisgseaton, -or email chris.seaton@oracle.com. - -## Mailing list - -Announcements about GraalVM, including TruffleRuby, are made on the -[graalvm-dev](https://oss.oracle.com/mailman/listinfo/graalvm-dev) mailing list. - -## System Compatibility - -TruffleRuby is actively tested on these systems: - -* Ubuntu 16.04 LTS -* Fedora 26 -* macOS 10.13 - -You need to [install LLVM](doc/user/installing-llvm.md) to build and run C -extensions and [`libssl`](doc/user/installing-libssl.md) to use `openssl`. You -may also need to set up a [UTF-8 locale](doc/user/utf8-locale.md) - -Oracle Linux is not currently supported due to not having a good way to install -a recent LLVM. - -## Current Status - -TruffleRuby is progressing fast but is currently probably not ready for you to -try running your full Ruby application on. Support for critical C extensions -such as OpenSSL and Nokogiri is missing. - -TruffleRuby is ready for experimentation and curious end-users to try on their -gems and smaller applications. - -### Common questions about the status of TruffleRuby - -#### Do you run Rails? - -We do run Rails, and pass the majority of the Rails test suite. But we are -missing support for OpenSSL, Nokogiri, and ActiveRecord database drivers -which makes it not practical to run real Rails applications at the moment. - -#### What is happening with AOT, startup time, and the SubstrateVM? - -You don't need a JVM to run TruffleRuby. With the -[SubstrateVM](doc/user/svm.md) -it is possible to produce a single, statically linked native binary executable -version of TruffleRuby, which doesn't need any JVM to run. - -This SubstrateVM version of TruffleRuby has startup performance and memory -footprint more similar to MRI than TruffleRuby on the JVM or JRuby. There are -[instructions](doc/user/svm.md) -for using it as part of GraalVM. - -#### Can TruffleRuby run on a standard JVM? - -It is possible to [run on an unmodified JDK 9](doc/user/using-java9.md) but you -will have to build Graal yourself and we recommend using GraalVM instead. - -#### How do I install gems? - -TruffleRuby cannot install gems out of the box yet, however there are -[temporary workarounds](doc/user/installing-gems.md) -which can be used to get it working. - -## Getting Started - -The best way to get started with TruffleRuby is via the GraalVM, which includes -compatible versions of everything you need as well as TruffleRuby. - -http://www.oracle.com/technetwork/oracle-labs/program-languages/ - -Inside the GraalVM is a `bin/ruby` command that runs TruffleRuby. -See [Using TruffleRuby with GraalVM](doc/user/using-graalvm.md) -instructions. - -You can also build TruffleRuby from source, see the -[Building Instructions](doc/contributor/workflow.md). - -## Documentation - -Documentation is in [`doc`](doc). - -## Licence - -TruffleRuby is copyright (c) 2013-2017 Oracle and/or its -affiliates, and is made available to you under the terms of three licenses: - -* Eclipse Public License version 1.0 -* GNU General Public License version 2 -* GNU Lesser General Public License version 2.1 - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. - -## Attribution - -TruffleRuby is a fork of [JRuby](https://github.com/jruby/jruby), combining it -with code from the [Rubinius](https://github.com/rubinius/rubinius) project, and -also containing code from the standard implementation of Ruby, -[MRI](https://github.com/ruby/ruby). diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/license.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/license.txt deleted file mode 100644 index 66529f4b4d4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/license.ruby/license.txt +++ /dev/null @@ -1 +0,0 @@ -Testing Ruby License \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/llvm-deps.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/llvm-deps.jar deleted file mode 100644 index 3eacef6c16f4..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/llvm-deps.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/native-image-deps.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/native-image-deps.jar deleted file mode 100644 index 0c2519744e76..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/native-image-deps.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/postinst.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/postinst.jar deleted file mode 100644 index a611a3ba3de1..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/postinst.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/postinst2.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/postinst2.jar deleted file mode 100644 index 2abbf14e312b..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/postinst2.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/r-deps.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/r-deps.jar deleted file mode 100644 index 22d441a31e1e..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/r-deps.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby deleted file mode 100755 index fbed8eddaa3d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby +++ /dev/null @@ -1 +0,0 @@ -Test content: ./jre/bin/ruby diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby-deps.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby-deps.jar deleted file mode 100644 index 8dcf2ae63e20..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby-deps.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby2 b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby2 deleted file mode 100755 index 1cc03a119bb8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/ruby2 +++ /dev/null @@ -1 +0,0 @@ -Test content: ./jre/bin/rubx diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby-i386.zip b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby-i386.zip deleted file mode 100644 index d692da895c0c..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby-i386.zip and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby2-11.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby2-11.jar deleted file mode 100644 index 8d809a0e72d0..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby2-11.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby2.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby2.jar deleted file mode 100644 index a76c26492255..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby2.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby3.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby3.jar deleted file mode 100644 index 3877a21793ca..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/truffleruby3.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/trufflerubyRO.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/trufflerubyRO.jar deleted file mode 100644 index 9120af48c317..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/trufflerubyRO.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/trufflerubyWork.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/trufflerubyWork.jar deleted file mode 100644 index 64b95173ced5..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/commands/trufflerubyWork.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/data/release21ceWithEE.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/data/release21ceWithEE.properties deleted file mode 100644 index 38556facba6c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/data/release21ceWithEE.properties +++ /dev/null @@ -1,26 +0,0 @@ -JAVA_VERSION="1.8.0_272" -OS_NAME="Linux" -OS_VERSION="2.6" -OS_ARCH="amd64" -SOURCE=" jvmci:0bbce9bf3339 compiler:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 graal-js:b53c4e144b5909876b377e31be69e3b3f381ae0b graal-nodejs:b53c4e144b5909876b377e31be69e3b3f381ae0b java-benchmarks:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 regex:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sdk:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sulong:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 tools:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 truffle:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438" -GRAALVM_VERSION="20.3.0" -COMMIT_INFO={"compiler": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "graal-js": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "graal-nodejs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "java-benchmarks": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "regex": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sdk": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sulong": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "tools": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "truffle": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}} -component_catalog="https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8.properties|{ee=Enterprise Edition}gds://oca.opensource.oracle.com/gds/meta-data.json|https://www.graalvm.org/component-catalog/graal-updater-ee-component-catalog-java8.properties" - -component_catalog_url=https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8.properties -component_catalog_label=GitHub CE 8 Components -component_catalog_editionLabel=GraalVM CE - -component_catalog_2_url=https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java11.properties -component_catalog_2_label=GitHub CE 11 Components - -ee_component_catalog_10_url=gds://oca.opensource.oracle.com/gds/meta-data.json -ee_component_catalog_10_label=GDS Component distribution -ee_component_catalog_editionLabel=GraalVM EE - -ee_component_catalog_15_url=https://whenever.acme.org/ee-extras.properties -ee_component_catalog_15_label=Some experimental components - -ee_component_catalog_13_url=https://www.graalvm.org/component-catalog/graal-updater-ee-component-catalog-java8.properties -ee_component_catalog_13_label=Github distribution -ee_component_catalog_13_paramX=valueY diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/GraalChannelBaseTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/GraalChannelBaseTest.java deleted file mode 100644 index 40f9ada72322..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/GraalChannelBaseTest.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.gds; - -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.IncompatibleException; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.remote.FileDownloader; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; -import org.junit.Rule; -import org.junit.Test; -import java.io.IOException; - -/** - * - * @author sdedic - */ -public class GraalChannelBaseTest extends CommandTestBase { - @Rule public ProxyResource proxyResource = new ProxyResource(); - - GraalChannelBase channel; - - @Override - public void setUp() throws Exception { - super.setUp(); - channel = new GraalChannelBase(this, this.withBundle(org.graalvm.component.installer.gds.rest.GDSChannel.class), this.getLocalRegistry()) { - @Override - public FileDownloader configureDownloader(ComponentInfo info, FileDownloader dn) { - return dn; - } - - @Override - protected ComponentStorage loadStorage() throws IOException { - return null; - } - }; -// storage.graalInfo.put(CommonConstants.CAP_EDITION, "ee"); -// -// storage.graalInfo.put(CommonConstants.CAP_OS_NAME, "linux"); -// storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "22.1.0"); -// storage.graalInfo.put(CAP_JAVA_VERSION, "11"); - } - - @Test - public void testThrowEmptyStorage() throws Exception { - try { - channel.throwEmptyStorage(); - fail("Exception expected"); - } catch (IncompatibleException ex) { - // ok - } - ComponentStorage chStorage = channel.throwEmptyStorage(); - assertNotNull("Stub storage expected for 2nd time", chStorage); - - assertEquals(0, chStorage.listComponentIDs().size()); - assertEquals(0, chStorage.loadComponentMetadata("org.graalvm").size()); - assertEquals(0, chStorage.loadGraalVersionInfo().size()); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/catalog-19.3.2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/catalog-19.3.2.properties deleted file mode 100644 index 2cd8eeb666a5..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/catalog-19.3.2.properties +++ /dev/null @@ -1,77 +0,0 @@ -# 19.3.2 Release -org.graalvm.19.3.2_macos_amd64=GraalVM 19.3.2 macos/amd64 -org.graalvm.19.3.2_linux_amd64=GraalVM 19.3.2 linux/amd64 - -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain=test://github.com/graalvm/graalvm-ce-builds/releases/download/vm-19.3.2/llvm-toolchain-installable-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-hash=bd236156ba4d47848236a317552d3e8ac11d1f33ee0843f87f65c5f28d59921c -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.19.3.2_macos_amd64.org.graalvm.llvm_toolchain-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain=test://github.com/graalvm/graalvm-ce-builds/releases/download/vm-19.3.2/llvm-toolchain-installable-java8-linux-amd64-19.3.2.jar -#Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-hash=c48fa0205b8ef891d11d8f3687851a921ca3a4a9928d5072c8f253cf794eb9de -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.19.3.2_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.native_image=test://github.com/graalvm/graalvm-ce-builds/releases/download/vm-19.3.2/native-image-installable-svm-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.native_image-hash=c69e039f1f2896881e627df97149436fb587a52a1f2bb469ee094fa5f467f69b -Component.19.3.2_macos_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.19.3.2_macos_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.19.3.2_macos_amd64.org.graalvm.native_image-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.native_image=test://github.com/graalvm/graalvm-ce-builds/releases/download/vm-19.3.2/native-image-installable-svm-java8-linux-amd64-19.3.2.jar -#Component.19.3.2_linux_amd64.org.graalvm.native_image-hash=30b59f3eb84c91d742822ea4f2647e882cd04ed68d97954d60cfb7f84dc71719 -Component.19.3.2_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.19.3.2_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.19.3.2_linux_amd64.org.graalvm.native_image-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.python=test://github.com/graalvm/graalpython/releases/download/vm-19.3.2/python-installable-svm-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.python-hash=1e95d88cac02694dfad97b4da361282e1b8e427732850d3d5db93ac8fddc8d72 -Component.19.3.2_macos_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.19.3.2_macos_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.19.3.2_macos_amd64.org.graalvm.python-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_macos_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.19.3.2_linux_amd64.org.graalvm.python=test://github.com/graalvm/graalpython/releases/download/vm-19.3.2/python-installable-svm-java8-linux-amd64-19.3.2.jar -Component.19.3.2_linux_amd64.org.graalvm.python-hash=0b0404691263ab9ce7c49ea633e82836be80b2fc4caa155b72d1627d1fd48add -Component.19.3.2_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.19.3.2_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.19.3.2_linux_amd64.org.graalvm.python-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.python-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python -Component.19.3.2_macos_amd64.org.graalvm.r=test://github.com/oracle/fastr/releases/download/vm-19.3.2/r-installable-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.r-hash=d137b2558a96cc2040c334c3ca42ad4670299de97903d34e11744882f0b0af87 -Component.19.3.2_macos_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.19.3.2_macos_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.r-Bundle-Name=FastR -Component.19.3.2_macos_amd64.org.graalvm.r-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_macos_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.19.3.2_linux_amd64.org.graalvm.r=test://github.com/oracle/fastr/releases/download/vm-19.3.2/r-installable-java8-linux-amd64-19.3.2.jar -Component.19.3.2_linux_amd64.org.graalvm.r-hash=9bc18e48c1cd697b37940d9fecf6f0cef0c2c66ea466834e359c5aa17cfdf286 -Component.19.3.2_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.19.3.2_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.19.3.2_linux_amd64.org.graalvm.r-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R -Component.19.3.2_macos_amd64.org.graalvm.ruby=test://github.com/oracle/truffleruby/releases/download/vm-19.3.2/ruby-installable-svm-java8-darwin-amd64-19.3.2.jar -Component.19.3.2_macos_amd64.org.graalvm.ruby-hash=c25515aa7a3ed8937b062887bc6377580351831b12fab87733b14f0388a2a56c -Component.19.3.2_macos_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.19.3.2_macos_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=macos)(os_arch=amd64)(java_version=8))" -Component.19.3.2_macos_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.19.3.2_macos_amd64.org.graalvm.ruby-Bundle-Version=19.3.2 -Component.19.3.2_macos_amd64.org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_macos_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby -Component.19.3.2_linux_amd64.org.graalvm.ruby=test://github.com/oracle/truffleruby/releases/download/vm-19.3.2/ruby-installable-svm-java8-linux-amd64-19.3.2.jar -Component.19.3.2_linux_amd64.org.graalvm.ruby-hash=ab0f4c915dade7772206f97589a5a94776cd597d7c4f6b6d8997fedc13cf0c47 -Component.19.3.2_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.19.3.2_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.2)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.19.3.2_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.19.3.2_linux_amd64.org.graalvm.ruby-Bundle-Version=19.3.2 -Component.19.3.2_linux_amd64.org.graalvm.ruby-Require-Bundle=org.graalvm.llvm-toolchain -Component.19.3.2_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/catalog-20.3.0.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/catalog-20.3.0.properties deleted file mode 100644 index 55f64c21b12c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/catalog-20.3.0.properties +++ /dev/null @@ -1,15 +0,0 @@ -# 20.3.0 Release -org.graalvm.20.3.0_macos_amd64=GraalVM 20.3.0 macos/amd64 -org.graalvm.20.3.0_linux_amd64=GraalVM 20.3.0 linux/amd64 - -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain=llvm-deps-20.3.0.jar -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Name=LLVM.org toolchain -Component.20.3.0_linux_amd64.org.graalvm.llvm_toolchain-Bundle-Version=20.3.0 - -Component.20.3.0_linux_amd64.org.graalvm.native_image=native-image-deps-20.3.0.jar -Component.20.3.0_linux_amd64.org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.20.3.0_linux_amd64.org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=20.3.0)(os_name=linux)(os_arch=amd64)(java_version=8))" -Component.20.3.0_linux_amd64.org.graalvm.native_image-Bundle-Name=Native Image -Component.20.3.0_linux_amd64.org.graalvm.native_image-Bundle-Version=20.3.0 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/insttest.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/insttest.json deleted file mode 100644 index 1cadcf22f200..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/insttest.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "Releases": { - "20.3.0-ee-jdk8": { - "name": "GraalVM Enterprise Edition 20.3.0 on jdk8", - "license": "test://acme.org/GRAALVM_EE_JAVA8_20.3.0/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "catalog": "catalog-20.3.0.properties", - "edition": "ee", - "java": "jdk8", - "version": "20.3.0", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "test://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-linux-amd64-19.3.3.tar.gz" - } - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/license.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/license.txt deleted file mode 100644 index fcf20ef4d3d8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/license.txt +++ /dev/null @@ -1 +0,0 @@ -License -- dummy test license. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/llvm-deps-20.3.0.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/llvm-deps-20.3.0.jar deleted file mode 100644 index 9c3f8d790274..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/llvm-deps-20.3.0.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/native-image-deps-20.3.0.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/native-image-deps-20.3.0.jar deleted file mode 100644 index 277faa45c2e6..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/native-image-deps-20.3.0.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-badJava.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-badJava.json deleted file mode 100644 index 5fed0e3155b6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-badJava.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "GraalVM Enterprise Edition 19.3.3 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdx11", - "version": "19.3.3", - "catalog": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/19_3_3_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-windows-amd64-19.3.3.zip" - } - } -} - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-badVersion.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-badVersion.json deleted file mode 100644 index be5841c950a5..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-badVersion.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "GraalVM Enterprise Edition 19.3.3 on jdk8", - "license": "https://acme.org/gds/GRAALVM_EE_JAVA8_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "a19.3.3", - "catalog": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/19_3_3_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-windows-amd64-19.3.3.zip" - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-invalid-catalog.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-invalid-catalog.json deleted file mode 100644 index 5f9a8fb8bbe0..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-invalid-catalog.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "19.3.2", - "catalog": "!!!-19.3.2.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-linux-amd64-19.3.2.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-windows-amd64-19.3.2.zip" - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-missingEdition.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-missingEdition.json deleted file mode 100644 index 73b86df44445..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-missingEdition.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "GraalVM Enterprise Edition 19.3.3 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "java": "jdk8", - "version": "19.3.3", - "catalog": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/19_3_3_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-windows-amd64-19.3.3.zip" - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-no-bases.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-no-bases.json deleted file mode 100644 index d0615b8d070e..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/rel-no-bases.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "19.3.2", - "catalog": "catalog-19.3.2.properties" -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases-mix.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases-mix.json deleted file mode 100644 index 9bf12ee054d2..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases-mix.json +++ /dev/null @@ -1,171 +0,0 @@ -{ - "Releases": { - "19.3.3-ee-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.3 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "19.3.3", - "catalog": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/19_3_3_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-windows-amd64-19.3.3.zip" - } - } - }, - "19.3.3-ee-jdk11": { - "name": "GraalVM Enterprise Edition 19.3.3 on jdk11", - "license": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk11", - "version": "19.3.3", - "catalog": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/19_3_3_EE_Java11_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "x86_64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-windows-amd64-19.3.3.zip" - } - } - }, - "19.3.2-ee-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "19.3.2", - "catalog": "https://oca.opensource.oracle.com/olds/GRAALVM_EE_JAVA8_19_3_2/19.3.2_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-linux-amd64-19.3.2.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-windows-amd64-19.3.2.zip" - } - } - }, - "19.3.2-ee-jdk11": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk11", - "license": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk11", - "version": "19.3.2", - "catalog": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/19.3.2_EE_Java11_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "Linux", - "arch": "x86_64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-linux-amd64-19.3.2.tar.gz" - }, - "macos-amd64": { - "os": "macos", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "x86_64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-windows-amd64-19.3.2.zip" - } - } - }, - - "19.3.2-ce-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ce", - "java": "jdk8", - "version": "19.3.2", - "catalog": "https://oca.opensource.oracle.com/olds/GRAALVM_EE_JAVA8_19_3_2/19.3.2_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-linux-amd64-19.3.2.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-windows-amd64-19.3.2.zip" - } - } - }, - - "19.3.2-ee2-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee2", - "java": "jdk8", - "version": "19.3.2", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-linux-amd64-19.3.2.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-windows-amd64-19.3.2.zip" - } - } - }, - - "19.3.2-ee3-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee3", - "java": "jdk8", - "version": "19.3.2", - "catalog": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/19.3.2_EE_Java8_component-catalog.properties" - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases.json deleted file mode 100644 index d9eb382eb637..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "Releases": { - "19.3.3-ee-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.3 on jdk8", - "license": "test://acme.org/GRAALVM_EE_JAVA8_19_3_3/license.txt", - "catalog": "test://acme.org/GRAALVM_EE_JAVA8_19_3_3/19_3_3_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": "test://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-linux-amd64-19.3.3.tar.gz", - "darwin-amd64": "test://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-darwin-amd64-19.3.3.tar.gz", - "windows-amd64": "test://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-windows-amd64-19.3.3.zip" - } - }, - "19.3.3-ee-jdk11": { - "name": "GraalVM Enterprise Edition 19.3.3 on jdk11", - "license": "test://acme.org/GRAALVM_EE_JAVA11_19_3_3/license.txt", - "catalog": "test://acme.org/GRAALVM_EE_JAVA11_19_3_3/19_3_3_EE_Java11_component-catalog.properties", - "base": { - "linux-amd64": "test://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-linux-amd64-19.3.3.tar.gz", - "darwin-amd64": "test://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-darwin-amd64-19.3.3.tar.gz", - "windows-amd64": "test://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-windows-amd64-19.3.3.zip" - } - }, - "19.3.2-ee-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "test://acme.org/GRAALVM_EE_JAVA8_19_3_2/license.txt", - "catalog": "catalog-19.3.2.properties", - "base": { - "linux-amd64": "test://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-linux-amd64-19.3.2.tar.gz", - "darwin-amd64": "test://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-darwin-amd64-19.3.2.tar.gz", - "windows-amd64": "test://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-windows-amd64-19.3.2.zip" - } - }, - "19.3.2-ee-jdk11": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk11", - "license": "test://acme.org/GRAALVM_EE_JAVA11_19_3_2/license.txt", - "catalog": "test://acme.org/GRAALVM_EE_JAVA11_19_3_2/19.3.2_EE_Java11_component-catalog.properties", - "base": { - "linux-amd64": "test://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-linux-amd64-19.3.2.tar.gz", - "darwin-amd64": "test://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-darwin-amd64-19.3.2.tar.gz", - "windows-amd64": "test://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-windows-amd64-19.3.2.zip" - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases2.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases2.json deleted file mode 100644 index 0d5a39806353..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/data/releases2.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "Releases": { - "19.3.3-ee-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.3 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "19.3.3", - "catalog": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/19_3_3_EE_Java8_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_3/graalvm-ee-java8-windows-amd64-19.3.3.zip" - } - } - }, - "19.3.3-ee-jdk11": { - "name": "GraalVM Enterprise Edition 19.3.3 on jdk11", - "license": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk11", - "version": "19.3.3", - "catalog": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/19_3_3_EE_Java11_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-linux-amd64-19.3.3.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-darwin-amd64-19.3.3.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_3/graalvm-ee-java11-windows-amd64-19.3.3.zip" - } - } - }, - "19.3.2-ee-jdk8": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk8", - "license": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk8", - "version": "19.3.2", - "catalog": "catalog-19.3.2.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-linux-amd64-19.3.2.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA8_19_3_2/graalvm-ee-java8-windows-amd64-19.3.2.zip" - } - } - }, - "19.3.2-ee-jdk11": { - "name": "GraalVM Enterprise Edition 19.3.2 on jdk11", - "license": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/license.txt", - "licenseLabel": "GraalVM Enterprise Edition License", - "edition": "ee", - "java": "jdk11", - "version": "19.3.2", - "catalog": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/19.3.2_EE_Java11_component-catalog.properties", - "base": { - "linux-amd64": { - "os": "linux", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-linux-amd64-19.3.2.tar.gz" - }, - "darwin-amd64": { - "os": "darwin", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-darwin-amd64-19.3.2.tar.gz" - }, - "windows-amd64": { - "os": "windows", - "arch": "amd64", - "url": "https://acme.org/GRAALVM_EE_JAVA11_19_3_2/graalvm-ee-java11-windows-amd64-19.3.2.zip" - } - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/ArtifactParserTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/ArtifactParserTest.java deleted file mode 100644 index e97b98c3d258..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/ArtifactParserTest.java +++ /dev/null @@ -1,287 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import java.util.Arrays; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.DistributionType; -import org.graalvm.component.installer.model.StabilityLevel; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import org.graalvm.shadowed.org.json.JSONArray; -import org.graalvm.shadowed.org.json.JSONException; -import org.graalvm.shadowed.org.json.JSONObject; -import org.junit.Test; -import java.util.Collections; -import java.util.Locale; -import java.util.Map; - -/** - * - * @author odouda - */ -public class ArtifactParserTest extends TestBase { - static final String MOCK_URL = "https://mock.url/"; - static final String JSON_VAL_ID = "mockProductId"; - static final String JSON_KEY_ID = "id"; - static final String JSON_KEY_CHECKSUM = "checksum"; - static final String JSON_VAL_CHECKSUM = "mockChecksum"; - static final String JSON_KEY_METADATA = "metadata"; - static final String JSON_KEY_DISP_NAME = "displayName"; - static final String JSON_VAL_DISP_NAME = "mockDisplayName"; - static final String JSON_KEY_LIC_ID = "licenseId"; - static final String JSON_VAL_LIC_ID = "mockLicenseId"; - static final String JSON_KEY_LIC_NAME = "licenseName"; - static final String JSON_VAL_LIC_NAME = "mockLicenseName"; - static final String JSON_KEY_IMPL_ACC = "isLicenseImplicitlyAccepted"; - static final String JSON_META_KEY = "key"; - static final String JSON_META_VAL = "value"; - static final String JSON_META_KEY_ARCH = "arch"; - static final String JSON_META_VAL_ARCH = "fakeArch"; - static final String JSON_META_KEY_OS = "os"; - static final String JSON_META_VAL_OS = "fakeOS"; - static final String JSON_VAL_DISP_NAME2 = JSON_VAL_DISP_NAME + " " + JSON_META_VAL_OS; - static final String JSON_META_KEY_JAVA = "java"; - static final String JSON_META_VAL_JAVA = "5"; - static final String JSON_META_KEY_VERSION = "version"; - static final String JSON_META_VAL_VERSION = "18.1.3"; - static final String JSON_META_KEY_EDITION = "edition"; - static final String JSON_META_VAL_EDITION = "ee"; - static final String JSON_META_KEY_STABILITY_LEVEL = "stabilityLevel"; - static final String JSON_META_KEY_STABILITY = "stability"; - static final String JSON_META_VAL_STAB_EXPERIMENTAL = StabilityLevel.Experimental.toString(); - static final String JSON_META_VAL_STAB_SUPPORTED = StabilityLevel.Supported.toString(); - static final String JSON_META_KEY_SYMBOLIC_NAME = "symbolicName"; - static final String JSON_META_VAL_SYMBOLIC_NAME = "org.graalvm.llvm-toolchain"; - static final String JSON_META_KEY_DEPENDENCY = "requireBundle"; - static final String JSON_META_KEY_REQUIRED = "requiredCapabilities"; - static final String REQ_VER = "graalvm_version"; - static final String REQ_OS = "os_name"; - static final String REQ_ARCH = "os_arch"; - static final String REQ_JAVA = "java_version"; - static final String JSON_META_VAL_REQUIRED = "org.graalvm; filter:=\"(&(" + REQ_VER + "=" + JSON_META_VAL_VERSION + ")(" + REQ_OS + "=" + JSON_META_VAL_OS + ")(" + REQ_ARCH + "=" + - JSON_META_VAL_ARCH + ")(" + REQ_JAVA + "=" + JSON_META_VAL_JAVA + "))\""; - static final String JSON_META_KEY_POLYGLOT = "polyglot"; - static final String JSON_META_KEY_WORK_DIR = "workingDirectories"; - static final String JSON_META_VAL_WORK_DIR = "languages/python"; - - @SuppressWarnings("this-escape") GDSRESTConnector conn = new GDSRESTConnector(MOCK_URL, this, JSON_VAL_ID, Version.fromString(JSON_META_VAL_VERSION)); - - @Test - public void testConstruct() { - ArtifactParser ap = null; - try { - ap = new ArtifactParser(null); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - assertEquals("Parsed Artifact JSON cannot be null.", ex.getMessage()); - // expected - } - JSONObject jo = new JSONObject(); - try { - ap = new ArtifactParser(jo); - fail("JSONException expected."); - } catch (JSONException ex) { - tstJsonExc(ex, JSON_KEY_ID); - // expected - } - jo.put(JSON_KEY_ID, JSON_VAL_ID); - try { - ap = new ArtifactParser(jo); - fail("JSONException expected."); - } catch (JSONException ex) { - tstJsonExc(ex, JSON_KEY_CHECKSUM); - // expected - } - jo.put(JSON_KEY_CHECKSUM, JSON_VAL_CHECKSUM); - try { - ap = new ArtifactParser(jo); - fail("JSONException expected."); - } catch (JSONException ex) { - tstJsonExc(ex, JSON_KEY_METADATA); - // expected - } - JSONArray meta = new JSONArray(); - jo.put(JSON_KEY_METADATA, meta); - try { - ap = new ArtifactParser(jo); - fail("JSONException expected."); - } catch (JSONException ex) { - tstJsonExc(ex, JSON_KEY_DISP_NAME); - // expected - } - jo.put(JSON_KEY_DISP_NAME, JSON_VAL_DISP_NAME); - try { - ap = new ArtifactParser(jo); - fail("StringIndexOutOfBoundsException expected."); - } catch (StringIndexOutOfBoundsException ex) { - assertEquals(makeSubstringExceptionMessage(0, -1, 15), ex.getMessage()); - // expected - } - jo.put(JSON_KEY_DISP_NAME, JSON_VAL_DISP_NAME + SystemUtils.OS.get().getName()); - try { - ap = new ArtifactParser(jo); - fail("JSONException expected."); - } catch (JSONException ex) { - tstJsonExc(ex, JSON_KEY_LIC_ID); - // expected - } - jo.put(JSON_KEY_LIC_ID, JSON_VAL_LIC_ID); - try { - ap = new ArtifactParser(jo); - fail("JSONException expected."); - } catch (JSONException ex) { - tstJsonExc(ex, JSON_KEY_LIC_NAME); - // expected - } - jo.put(JSON_KEY_LIC_NAME, JSON_VAL_LIC_NAME); - ap = new ArtifactParser(jo); - assertEquals(null, ap.getLabel()); - assertEquals(SystemUtils.ARCH.get().getName(), ap.getArch()); - assertEquals(SystemUtils.OS.get().getName(), ap.getOs()); - assertEquals(SystemUtils.getJavaMajorVersion() + "", ap.getJava()); - assertEquals(null, ap.getVersion()); - assertEquals(null, ap.getEdition()); - setMeta(meta, JSON_META_KEY_ARCH, JSON_META_VAL_ARCH); - assertEquals(JSON_META_VAL_ARCH, ap.getArch()); - setMeta(meta, JSON_META_KEY_OS, JSON_META_VAL_OS); - assertEquals(JSON_META_VAL_OS, ap.getOs()); - setMeta(meta, JSON_META_KEY_JAVA, JSON_META_VAL_JAVA); - assertEquals(JSON_META_VAL_JAVA, ap.getJava()); - setMeta(meta, JSON_META_KEY_VERSION, JSON_META_VAL_VERSION); - assertEquals(JSON_META_VAL_VERSION, ap.getVersion()); - setMeta(meta, JSON_META_KEY_EDITION, JSON_META_VAL_EDITION); - assertEquals(JSON_META_VAL_EDITION, ap.getEdition()); - setMeta(meta, JSON_META_KEY_SYMBOLIC_NAME, JSON_META_VAL_SYMBOLIC_NAME); - assertEquals(JSON_META_VAL_SYMBOLIC_NAME, ap.getLabel()); - } - - private static String makeSubstringExceptionMessage(int start, int end, int length) { - String str = makeStringOfLength(length); - try { - str.substring(start, end); - } catch (StringIndexOutOfBoundsException ex) { - return ex.getMessage(); - } - return null; - } - - private static String makeStringOfLength(int length) { - char[] arr = new char[length]; - Arrays.fill(arr, 'a'); - return String.valueOf(arr); - } - - @Test - public void testAsComponentInfo() { - JSONObject jo = prepareJO(); - ArtifactParser ap = new ArtifactParser(jo); - ComponentInfo ci = ap.asComponentInfo(conn, this); - assertEquals(JSON_VAL_DISP_NAME, ci.getName()); - assertEquals(JSON_META_VAL_SYMBOLIC_NAME, ci.getId()); - assertEquals(Version.fromString(JSON_META_VAL_VERSION), ci.getVersion()); - assertEquals(JSON_META_VAL_VERSION, ci.getVersionString()); - assertArrayEquals(SystemUtils.toHashBytes(JSON_VAL_CHECKSUM), ci.getShaDigest()); - assertEquals(JSON_VAL_CHECKSUM, ci.getTag()); - assertEquals(conn.makeArtifactDownloadURL(JSON_VAL_ID), ci.getRemoteURL()); - assertEquals(conn.makeArtifactsURL(JSON_META_VAL_JAVA), ci.getOrigin()); - assertEquals(conn.makeLicenseURL(JSON_VAL_LIC_ID), ci.getLicensePath()); - assertEquals(JSON_VAL_LIC_NAME, ci.getLicenseType()); - assertEquals(DistributionType.OPTIONAL, ci.getDistributionType()); - assertEquals(Collections.singleton(JSON_META_VAL_WORK_DIR), ci.getWorkingDirectories()); - assertEquals(Map.of(REQ_ARCH, JSON_META_VAL_ARCH.toLowerCase(Locale.ENGLISH), - REQ_OS, JSON_META_VAL_OS.toLowerCase(Locale.ENGLISH), - REQ_JAVA, JSON_META_VAL_JAVA, - REQ_VER, JSON_META_VAL_VERSION), ci.getRequiredGraalValues()); - assertEquals(Collections.singleton(JSON_META_VAL_SYMBOLIC_NAME), ci.getDependencies()); - assertEquals(StabilityLevel.fromName(JSON_META_VAL_STAB_EXPERIMENTAL), ci.getStability()); - assertFalse(ci.isImplicitlyAccepted()); - setMeta(jo, JSON_META_KEY_STABILITY_LEVEL, JSON_META_VAL_STAB_SUPPORTED); - jo.put(JSON_KEY_IMPL_ACC, true); - ci = ap.asComponentInfo(conn, this); - assertEquals(StabilityLevel.fromName(JSON_META_VAL_STAB_SUPPORTED), ci.getStability()); - assertTrue(ci.isImplicitlyAccepted()); - } - - JSONObject setMeta(JSONObject jo, String key, String val) { - JSONArray meta = jo.optJSONArray(JSON_KEY_METADATA); - if (meta == null) { - meta = new JSONArray(); - jo.put(JSON_KEY_METADATA, meta); - } - return setMeta(meta, key, val); - } - - JSONObject setMeta(JSONArray meta, String key, String val) { - JSONObject o; - for (int i = 0; i < meta.length(); ++i) { - o = meta.getJSONObject(i); - if (key.equals(o.getString(JSON_META_KEY))) { - o.put(JSON_META_VAL, val); - return o; - } - } - o = new JSONObject(); - o.put(JSON_META_KEY, key); - o.put(JSON_META_VAL, val); - meta.put(o); - return o; - } - - JSONObject prepareJO() { - JSONObject jo = new JSONObject(); - jo.put(JSON_KEY_ID, JSON_VAL_ID); - jo.put(JSON_KEY_CHECKSUM, JSON_VAL_CHECKSUM); - jo.put(JSON_KEY_DISP_NAME, JSON_VAL_DISP_NAME2); - jo.put(JSON_KEY_LIC_ID, JSON_VAL_LIC_ID); - jo.put(JSON_KEY_LIC_NAME, JSON_VAL_LIC_NAME); - JSONArray meta = new JSONArray(); - jo.put(JSON_KEY_METADATA, meta); - setMeta(meta, JSON_META_KEY_SYMBOLIC_NAME, JSON_META_VAL_SYMBOLIC_NAME); - setMeta(meta, JSON_META_KEY_ARCH, JSON_META_VAL_ARCH); - setMeta(meta, JSON_META_KEY_OS, JSON_META_VAL_OS); - setMeta(meta, JSON_META_KEY_JAVA, JSON_META_VAL_JAVA); - setMeta(meta, JSON_META_KEY_VERSION, JSON_META_VAL_VERSION); - setMeta(meta, JSON_META_KEY_EDITION, JSON_META_VAL_EDITION); - setMeta(meta, JSON_META_KEY_REQUIRED, JSON_META_VAL_REQUIRED); - setMeta(meta, JSON_META_KEY_POLYGLOT, Boolean.toString(false)); - setMeta(meta, JSON_META_KEY_WORK_DIR, JSON_META_VAL_WORK_DIR); - setMeta(meta, JSON_META_KEY_DEPENDENCY, JSON_META_VAL_SYMBOLIC_NAME); - setMeta(meta, JSON_META_KEY_STABILITY, JSON_META_VAL_STAB_EXPERIMENTAL); - return jo; - } - - void tstJsonExc(JSONException ex, String key) { - assertEquals("JSONObject[\"" + key + "\"] not found.", ex.getMessage()); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSCatalogStorageTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSCatalogStorageTest.java deleted file mode 100644 index b9fc8fe07625..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSCatalogStorageTest.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import static org.junit.Assert.assertEquals; -import org.junit.Test; -import java.io.IOException; -import java.net.URL; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -/** - * - * @author odouda - */ -@SuppressWarnings("this-escape") -public class GDSCatalogStorageTest extends CommandTestBase { - static final String MOCK_URL = "https://mock.url/"; - static final String ID1 = "id1"; - static final String ID2 = "id2"; - URL mockUrl; - - List infos = getComps(); - - @Override - public void setUp() throws Exception { - super.setUp(); - mockUrl = SystemUtils.toURL(MOCK_URL); - } - - @Test - public void test() throws IOException { - GDSCatalogStorage cs = getGDSCatalogStorage(); - HashMap> map = getMapComps(); - assertEquals(map, cs.getComponents()); - assertEquals(map.get(ID1), cs.loadComponentMetadata(ID1)); - assertEquals(map.get(ID2), cs.loadComponentMetadata(ID2)); - assertEquals(map.keySet(), cs.listComponentIDs()); - } - - private GDSCatalogStorage getGDSCatalogStorage() { - return new GDSCatalogStorage(localRegistry, this, mockUrl, infos); - } - - List getComps() { - return List.of(new ComponentInfo(ID1, "name11", Version.NO_VERSION), - new ComponentInfo(ID1, "name12", Version.NO_VERSION), - new ComponentInfo(ID2, "name21", Version.NO_VERSION), - new ComponentInfo(ID2, "name22", Version.NO_VERSION)); - } - - HashMap> getMapComps() { - HashMap> map = new HashMap<>(); - for (ComponentInfo c : infos) { - map.computeIfAbsent(c.getId(), id -> new HashSet<>()).add(c); - } - return map; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSChannelTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSChannelTest.java deleted file mode 100644 index d6c836c8d382..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSChannelTest.java +++ /dev/null @@ -1,396 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.MemoryFeedback; -import java.nio.file.Path; -import java.util.Collection; -import java.util.List; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.CommonConstants; -import static org.graalvm.component.installer.CommonConstants.CAP_JAVA_VERSION; -import static org.graalvm.component.installer.CommonConstants.RELEASE_GDS_PRODUCT_ID_KEY; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.Version; -import static org.graalvm.component.installer.gds.rest.GDSChannelTest.TestGDSChannel.MockGDSCatalogStorage.ID; -import org.graalvm.component.installer.MemoryFeedback.Case; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.remote.FileDownloader; -import org.graalvm.component.installer.remote.ProxyConnectionFactory.HttpConnectionException; -import org.graalvm.shadowed.org.json.JSONException; -import org.junit.After; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.TestName; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.MalformedURLException; -import java.net.URL; -import static java.nio.charset.StandardCharsets.UTF_8; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Map; -import java.util.Set; -import static org.junit.Assert.assertFalse; - -/** - * - * @author odouda - */ -public class GDSChannelTest extends CommandTestBase { - private static final String MOCK_TOKEN = "MOCK_TOKEN"; - private static final String HEADER_DOWNLOAD_CONFIG = "x-download-token"; - @Rule public TestName name = new TestName(); - @Rule public ProxyResource proxyResource = new ProxyResource(); - - TestGDSChannel channel; - MemoryFeedback mf; - - @Override - public void setUp() throws Exception { - super.setUp(); - delegateFeedback(mf = new MemoryFeedback()); - - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ee"); - - storage.graalInfo.put(CommonConstants.CAP_OS_NAME, "linux"); - storage.graalInfo.put(CommonConstants.CAP_OS_ARCH, "amd64"); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "22.1.0"); - storage.graalInfo.put(CommonConstants.RELEASE_GDS_PRODUCT_ID_KEY, "mockProductId"); - storage.graalInfo.put(CAP_JAVA_VERSION, "11"); - - refreshChannel(); - } - - @After - public void tearDown() { - assertTrue(name.getMethodName() + ": " + mf.toString(), mf.isEmpty()); - } - - private void refreshChannel() { - this.localRegistry = null; - channel = new TestGDSChannel(this, this, this.getLocalRegistry()); - } - - private void refreshChannel(Path p) throws MalformedURLException { - refreshChannel(); - channel.setIndexURL(p.toUri().toURL()); - } - - @Test - public void testWrongJson() throws Exception { - Path p = dataFile("../data/rel-no-bases.json"); - channel.setIndexURL(p.toUri().toURL()); - try { - channel.loadArtifacts(p, Collections.emptyList()); - fail("JSONexception expected."); - } catch (JSONException ex) { - // expected - } - } - - @Test - public void testNoUsableComponents() throws Exception { - Path p = dataFile("data/gdsreleases.json"); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "22.0.0"); - refreshChannel(p); - List infos = channel.loadArtifacts(p, Collections.emptyList()); - assertTrue(infos.isEmpty()); - } - - @Test - public void testFilterUpdates() throws Exception { - Path p = dataFile("data/gdsreleases.json"); - channel.setIndexURL(p.toUri().toURL()); - tstUpdates(p, 9, 18); - storage.graalInfo.put(CommonConstants.CAP_OS_NAME, "macos"); - refreshChannel(p); - tstUpdates(p, 9, 18); - storage.graalInfo.put(CommonConstants.CAP_OS_NAME, "windows"); - refreshChannel(p); - tstUpdates(p, 5, 10); - storage.graalInfo.put(CommonConstants.CAP_OS_ARCH, "aarch64"); - storage.graalInfo.put(CommonConstants.CAP_OS_NAME, "linux"); - refreshChannel(p); - tstUpdates(p, 7, 14); - storage.graalInfo.put(CommonConstants.CAP_OS_NAME, "macos"); - refreshChannel(p); - tstUpdates(p, 0, 0); - storage.graalInfo.put(CommonConstants.CAP_OS_NAME, "windows"); - refreshChannel(p); - tstUpdates(p, 0, 0); - } - - private void tstUpdates(Path p, int noUpdates, int allowedUpdates) throws IOException { - channel.setAllowUpdates(false); - checkArtifactsCount(p, noUpdates); - channel.setAllowUpdates(true); - checkArtifactsCount(p, allowedUpdates); - } - - private void checkArtifactsCount(Path p, int count) throws IOException { - List infos = channel.loadArtifacts(p, Collections.emptyList()); - assertEquals(infos.toString(), count, infos.size()); - } - - @Test - public void testFailOnNoURL() throws Exception { - Path p = dataFile("data/gdsreleases.json"); - try { - channel.loadArtifacts(p, Collections.emptyList()); - fail("Expected NPE from missing URL."); - } catch (NullPointerException ex) { - StackTraceElement stackTrace = ex.getStackTrace()[0]; - assertEquals("org.graalvm.component.installer.gds.rest.GDSChannelTest$TestGDSChannel", - stackTrace.getClassName()); - assertEquals("getConnector", stackTrace.getMethodName()); - } - } - - @Test - public void testLoadComponentStorage() throws Exception { - Path p = dataFile("data/gdsreleases.json"); - channel.setIndexURL(p.toUri().toURL()); - ComponentStorage store = channel.getStorage(); - assertTrue(mf.isEmpty()); - Collection cids = store.listComponentIDs(); - mf.checkMem(Case.FRM, "OLDS_ReleaseFile"); - mf.checkMem(Case.MSG, "MSG_UsingFile", "OLDS_ReleaseFile", ""); - List infos = new ArrayList<>(); - for (String id : cids) { - infos.addAll(store.loadComponentMetadata(id)); - } - assertEquals(infos.toString(), 9, infos.size()); - } - - @Test - public void testInterceptDownloadException() throws Exception { - String mockUrlString = "http://some.mock.url/"; - URL url = SystemUtils.toURL(mockUrlString); - channel.setIndexURL(url); - IOException ioExc = new IOException("some Exception."); - FileDownloader fd = new FileDownloader("something", url, this); - try { - fd.download(); - } catch (Throwable t) { - } - mf.checkMem(Case.MSG, "MSG_Downloading", "something", url.getHost()); - channel.mockStorage(); - - channel.respErr = "{code:\"UnverifiedToken\"}"; - mf.nextInput("something"); - HttpConnectionException httpExc = new HttpConnectionException("my msg", ioExc, false, channel.new MockHttpURLConnection(channel.getConnector().makeArtifactDownloadURL(ID))); - IOException out = channel.interceptDownloadException(httpExc, fd); - assertSame(null, out); - mf.checkMem(Case.MSG, "ERR_InvalidToken", new Object[]{null}); - mf.checkMem(Case.INP, "something"); - - channel.respErr = "{code:\"InvalidToken\"}"; - channel.tokStore.setToken(MOCK_TOKEN); - mf.nextInput("token"); - httpExc = new HttpConnectionException("my msg", ioExc, false, channel.new MockHttpURLConnection(channel.getConnector().makeArtifactDownloadURL(ID))); - out = channel.interceptDownloadException(httpExc, fd); - assertSame(null, out); - assertEquals("token", channel.tokStore.getToken()); - mf.checkMem(Case.MSG, "ERR_WrongToken", MOCK_TOKEN); - mf.checkMem(Case.MSG, "MSG_InputTokenEntry"); - mf.checkMem(Case.MSG, "PROMPT_InputTokenEntry"); - mf.checkMem(Case.INP, "token"); - mf.checkMem(Case.MSG, "MSG_ObtainedToken", "token"); - - mf.nextInput(null); - mf.nextInput("email@dot.com"); - out = channel.interceptDownloadException(httpExc, fd); - assertSame(null, out); - assertEquals(GDSFileConnector.MOCK_TOKEN_NEW, channel.tokStore.getToken()); - mf.checkMem(Case.MSG, "ERR_WrongToken", "token"); - mf.checkMem(Case.MSG, "MSG_InputTokenEntry"); - mf.checkMem(Case.MSG, "PROMPT_InputTokenEntry"); - mf.checkMem(Case.INP, null); - mf.checkMem(Case.MSG, "MSG_EmailAddressEntry"); - mf.checkMem(Case.MSG, "PROMPT_EmailAddressEntry"); - mf.checkMem(Case.INP, "email@dot.com"); - mf.checkMem(Case.MSG, "MSG_ObtainedToken", GDSFileConnector.MOCK_TOKEN_NEW); - mf.checkMem(Case.MSG, "PROMPT_VerifyEmailAddressEntry", "email@dot.com"); - mf.checkMem(Case.INP, null); - - channel.respErr = "{code:\"InvalidLicenseAcceptance\"}"; - httpExc = new HttpConnectionException("my msg", ioExc, false, channel.new MockHttpURLConnection(channel.getConnector().makeArtifactDownloadURL(ID))); - out = channel.interceptDownloadException(httpExc, fd); - assertSame(null, out); - mf.checkMem(Case.FRM, "MSG_YourEmail"); - mf.checkMem(Case.MSG, "PROMPT_VerifyEmailAddressEntry", "MSG_YourEmail"); - mf.checkMem(Case.INP, null); - - channel.respErr = "invalid json"; - httpExc = new HttpConnectionException("my msg", ioExc, false, channel.new MockHttpURLConnection(channel.getConnector().makeArtifactDownloadURL(ID))); - out = channel.interceptDownloadException(httpExc, fd); - assertSame(ioExc, out); - - httpExc = new HttpConnectionException("my msg", ioExc, false, channel.new MockHttpURLConnection(channel.getConnector().makeArtifactDownloadURL(ID + 2))); - out = channel.interceptDownloadException(httpExc, fd); - assertSame(ioExc, out); - - httpExc = new HttpConnectionException("my msg", ioExc, false, channel.new MockHttpURLConnection(url)); - out = channel.interceptDownloadException(httpExc, fd); - assertSame(ioExc, out); - - channel.respCode = 300; - httpExc = new HttpConnectionException("my msg", ioExc, false, channel.new MockHttpURLConnection(channel.getConnector().makeArtifactDownloadURL(ID))); - out = channel.interceptDownloadException(httpExc, fd); - assertSame(ioExc, out); - - out = channel.interceptDownloadException(ioExc, fd); - assertSame(ioExc, out); - } - - @Test - public void testConfigureDownloader() throws MalformedURLException { - String mockUrlString = "http://some.mock.url/"; - URL url = SystemUtils.toURL(mockUrlString); - channel.setIndexURL(url); - channel.tokStore.setToken(MOCK_TOKEN); - FileDownloader fd = new FileDownloader("something", url, this); - ComponentInfo ci = new ComponentInfo("ID", "name", "1.0.0"); - channel.configureDownloader(ci, fd); - Map headers = fd.getRequestHeaders(); - assertEquals(MOCK_TOKEN, headers.get(HEADER_DOWNLOAD_CONFIG)); - assertEquals(3, headers.size()); - - fd = new FileDownloader("something", url, this); - ci.setImplicitlyAccepted(true); - channel.configureDownloader(ci, fd); - headers = fd.getRequestHeaders(); - assertEquals(null, headers.get(HEADER_DOWNLOAD_CONFIG)); - assertEquals(2, headers.size()); - } - - @Test - public void testNeedToken() { - ComponentInfo ci = new ComponentInfo("ID", "name", "1.0.0"); - assertTrue(channel.needToken(ci)); - - ci.setImplicitlyAccepted(true); - assertFalse(channel.needToken(ci)); - - ci.setImplicitlyAccepted(false); - assertTrue(channel.needToken(ci)); - } - - final class TestGDSChannel extends GDSChannel { - GDSRESTConnector conn = null; - String respErr = "Mock error response."; - int respCode = 401; - TestGDSTokenStorage tokStore; - - TestGDSChannel(CommandInput aInput, Feedback aFeedback, ComponentRegistry aRegistry) { - super(aInput, aFeedback, aRegistry); - setTokenStorage(tokStore = new TestGDSTokenStorage(aFeedback, aInput) { - @Override - public void save() throws IOException { - } - }); - } - - @Override - GDSRESTConnector getConnector() { - return conn == null ? conn = new GDSFileConnector( - channel.getIndexURL().toString(), - GDSChannelTest.this, - getLocalRegistry().getGraalCapabilities() - .get(RELEASE_GDS_PRODUCT_ID_KEY), - getLocalRegistry().getGraalVersion()) : conn; - } - - public void mockStorage() { - storage = new MockGDSCatalogStorage(localRegistry, fb, getIndexURL(), Collections.emptyList()); - } - - final class MockGDSCatalogStorage extends GDSCatalogStorage { - static final String ID = "id"; - final ComponentInfo ci = new ComponentInfo(ID, ID, Version.NO_VERSION); - - MockGDSCatalogStorage(ComponentRegistry localRegistry, Feedback feedback, URL baseURL, Collection artifacts) { - super(localRegistry, feedback, baseURL, artifacts); - ci.setRemoteURL(getConnector().makeArtifactDownloadURL(ID)); - ci.setLicensePath(getConnector().makeLicenseURL(ID)); - } - - @Override - public Set listComponentIDs() throws IOException { - return Collections.singleton(ID); - } - - @Override - public Set loadComponentMetadata(String id) throws IOException { - assertSame(ID, id); - return Collections.singleton(ci); - } - } - - final class MockHttpURLConnection extends HttpURLConnection { - MockHttpURLConnection(URL url) { - super(url); - } - - @Override - public void disconnect() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean usingProxy() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void connect() throws IOException { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public InputStream getErrorStream() { - return new ByteArrayInputStream(respErr.getBytes(UTF_8)); - } - - @Override - public int getResponseCode() throws IOException { - return respCode; - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSFileConnector.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSFileConnector.java deleted file mode 100644 index 98e797a3f9ce..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSFileConnector.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.remote.FileDownloader; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * - * @author odouda - */ -public class GDSFileConnector extends GDSRESTConnector { - public GDSFileConnector(String baseURL, Feedback feedback, String productId, Version gvmVersion) { - super(baseURL, feedback, productId, gvmVersion); - } - - @Override - protected Map> getParams() { - return Collections.emptyMap(); - } - - @Override - protected FileDownloader obtain(String endpoint) { - return super.obtain(""); - } - - static final String MOCK_TOKEN_NEW = "newMockToken"; - String[] verEmInps; - - @Override - public String sendVerificationEmail(String email, String licAddr, String oldToken) { - verEmInps = new String[]{email, licAddr, oldToken}; - return oldToken == null ? MOCK_TOKEN_NEW : oldToken; - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSRESTConnectorTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSRESTConnectorTest.java deleted file mode 100644 index 87948b3d5bb2..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSRESTConnectorTest.java +++ /dev/null @@ -1,424 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.MemoryFeedback; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.URLConnectionFactory; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.gds.rest.GDSRESTConnector.GDSRequester; -import org.graalvm.component.installer.gds.rest.GDSRESTConnectorTest.GDSTestConnector.TestGDSRequester.TestURLConnectionFactory.TestURLConnection; -import org.graalvm.component.installer.MemoryFeedback.Case; -import org.graalvm.component.installer.remote.FileDownloader; -import org.junit.After; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Test; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import static java.nio.charset.StandardCharsets.UTF_8; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -/** - * - * @author odouda - */ -public class GDSRESTConnectorTest extends TestBase { - static final String VERSION_STRING = "21.3.0"; - static final Version TEST_VERSION = Version.fromString(VERSION_STRING); - static final String TEST_EMAIL = "mock@email.ofc"; - static final String TEST_ID = "D35D04EC5DB2F1F6E0531614000A615C"; - static final String TEST_TOKEN = "RDhCMUFEMUYwMjM1OEQ0MkUwNTMyRDE0MDAwQTAyRjI6NGZjMTFiMzAxMDVkOTAzMDk1NjM4MWJmODY4NWFmODRiYTk2NjEwYQ"; - static final String TEST_TOKEN_OLD = "OldCMUFEMUYwMjM1OEQ0MkUwNTMyRDE0MDAwQTAyRjI6NGZjMTFiMzAxMDVkOTAzMDk1NjM4MWJmODY4NWFmODRiYTk2NjEOld"; - static final String TEST_TOKEN_RESPONSE = "{\n" + " \"token\": \"" + TEST_TOKEN + "\",\n" + " \"status\": \"UNVERIFIED\"\n" + "}"; - static final String TEST_JAVA = "11"; - static final String TEST_JDK = "jdk" + TEST_JAVA; - static final String TEST_TOKEN_REQUEST_ACCEPT = "{\"type\":\"" + GDSRequester.ACCEPT_LICENSE + "\",\"token\":\"" + TEST_TOKEN_OLD + "\",\"licenseId\":\"gdsreleases.json\"}"; - static final String TEST_TOKEN_REQUEST_GENERATE = "{\"type\":\"" + GDSRequester.GENERATE_CONFIG + "\",\"email\":\"" + TEST_EMAIL + "\",\"licenseId\":\"gdsreleases.json\"}"; - static final String TEST_GDS_AGENT = String.format("GVM/%s (arch:%s; os:%s; java:%s)", - TEST_VERSION.toString(), - SystemUtils.ARCH.sysName(), - SystemUtils.OS.sysName(), - SystemUtils.getJavaMajorVersion()); - static final String WRONG_RESPONSE = "wrong response"; - static final String TEST_TOKEN_REVOKE = "{\"type\":\"" + GDSRequester.REVOKE_TOKEN + "\",\"downloadToken\":\"" + TEST_TOKEN + "\"}"; - static final String TEST_TOKEN_REVOKE_ALL = "{\"type\":\"" + GDSRequester.REVOKE_TOKEN + "\",\"email\":\"" + TEST_EMAIL + "\"}"; - - final String testURL; - final GDSTestConnector testConnector; - final MemoryFeedback mf; - - @SuppressWarnings("this-escape") - public GDSRESTConnectorTest() throws IOException { - testURL = dataFile("data/gdsreleases.json").toUri().toURL().toString(); - testConnector = new GDSTestConnector(testURL, this, TEST_ID, TEST_VERSION); - delegateFeedback(mf = new MemoryFeedback()); - } - - @After - public void tearDown() { - assertTrue(mf.toString(), mf.isEmpty()); - } - - @Test - public void testConstructor() { - assertEquals(testURL, testConnector.baseURL); - assertEquals(TEST_ID, testConnector.productId); - assertEquals(TEST_GDS_AGENT, testConnector.gdsUserAgent); - GDSTestConnector conn = null; - try { - conn = new GDSTestConnector(null, this, TEST_ID, TEST_VERSION); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - // expected - } - try { - conn = new GDSTestConnector("", this, TEST_ID, TEST_VERSION); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - // expected - } - try { - conn = new GDSTestConnector("notURL", this, TEST_ID, TEST_VERSION); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - // expected - } - try { - conn = new GDSTestConnector(testURL, null, TEST_ID, TEST_VERSION); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - // expected - } - try { - conn = new GDSTestConnector(testURL, this, null, TEST_VERSION); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - // expected - } - try { - conn = new GDSTestConnector(testURL, this, "", TEST_VERSION); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - // expected - } - try { - conn = new GDSTestConnector(testURL, this, TEST_ID, null); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - // expected - } - try { - conn = new GDSTestConnector(testURL, this, TEST_ID, Version.NO_VERSION); - fail("IllegalArgumentException expected."); - } catch (IllegalArgumentException ex) { - // expected - } - - assertTrue(conn == null); - } - - @Test - public void testObtainArtifacts() { - testConnector.obtainArtifacts(); - checkBaseParams(GDSRESTConnector.ENDPOINT_ARTIFACTS); - - testConnector.obtainArtifacts(TEST_JAVA); - List metas = checkBaseParams(GDSRESTConnector.ENDPOINT_ARTIFACTS); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_JAVA + TEST_JDK)); - - mf.checkMem(Case.FRM, "OLDS_ReleaseFile"); - mf.checkMem(Case.MSG, "MSG_UsingFile", "OLDS_ReleaseFile", ""); - mf.checkMem(Case.FRM, "OLDS_ReleaseFile"); - mf.checkMem(Case.MSG, "MSG_UsingFile", "OLDS_ReleaseFile", ""); - } - - @Test - public void testObtainComponents() { - testConnector.obtainComponents(); - List metas = checkBaseParams(GDSRESTConnector.ENDPOINT_ARTIFACTS); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_TYPE_COMP)); - - testConnector.obtainComponents(VERSION_STRING); - metas = checkBaseParams(GDSRESTConnector.ENDPOINT_ARTIFACTS); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_TYPE_COMP)); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_RELEASE + VERSION_STRING)); - - mf.checkMem(Case.FRM, "OLDS_ReleaseFile"); - mf.checkMem(Case.MSG, "MSG_UsingFile", "OLDS_ReleaseFile", ""); - mf.checkMem(Case.FRM, "OLDS_ReleaseFile"); - mf.checkMem(Case.MSG, "MSG_UsingFile", "OLDS_ReleaseFile", ""); - } - - @Test - public void testObtainProduct() { - testConnector.obtainProduct(); - Map> params = testConnector.testParams; - testConnector.getParams(); - assertTrue(testConnector.testParams.isEmpty()); - assertEquals(GDSRESTConnector.QUERRY_PRODUCT_NAME, params.get(GDSRESTConnector.QUERRY_DISPLAY_NAME).get(0)); - assertEquals(GDSRESTConnector.QUERRY_LIMIT_VAL, params.get(GDSRESTConnector.QUERRY_LIMIT_KEY).get(0)); - assertEquals(GDSRESTConnector.ENDPOINT_PRODUCTS, testConnector.endpoint); - - mf.checkMem(Case.FRM, "OLDS_ReleaseFile"); - mf.checkMem(Case.MSG, "MSG_UsingFile", "OLDS_ReleaseFile", ""); - } - - @Test - public void testObtainReleases() { - testConnector.obtainReleases(); - List metas = checkBaseParams(GDSRESTConnector.ENDPOINT_ARTIFACTS); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_TYPE_CORE)); - - testConnector.obtainReleases(TEST_JAVA); - metas = checkBaseParams(GDSRESTConnector.ENDPOINT_ARTIFACTS); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_TYPE_CORE)); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_JAVA + TEST_JDK)); - - mf.checkMem(Case.FRM, "OLDS_ReleaseFile"); - mf.checkMem(Case.MSG, "MSG_UsingFile", "OLDS_ReleaseFile", ""); - mf.checkMem(Case.FRM, "OLDS_ReleaseFile"); - mf.checkMem(Case.MSG, "MSG_UsingFile", "OLDS_ReleaseFile", ""); - } - - @Test - public void testMakeArtifactsURL() { - String artURL = testConnector.makeArtifactsURL(TEST_JAVA); - assertTrue(artURL.equals(testURL + GDSRESTConnector.ENDPOINT_ARTIFACTS)); - Map> params = testConnector.testParams; - testConnector.getParams(); - assertTrue(testConnector.testParams.isEmpty()); - assertEquals(TEST_ID, params.get(GDSRESTConnector.QUERRY_PRODUCT).get(0)); - List metas = params.get(GDSRESTConnector.QUERRY_METADATA); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_OS + SystemUtils.OS.get().getName())); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_ARCH + SystemUtils.ARCH.get().getName())); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_JAVA + TEST_JDK)); - } - - @Test - public void testMakeReleaseCatalogURL() { - String artURL = testConnector.makeReleaseCatalogURL(VERSION_STRING, TEST_JAVA); - assertTrue(artURL.equals(testURL + GDSRESTConnector.ENDPOINT_ARTIFACTS)); - Map> params = testConnector.testParams; - testConnector.getParams(); - assertTrue(testConnector.testParams.isEmpty()); - assertEquals(TEST_ID, params.get(GDSRESTConnector.QUERRY_PRODUCT).get(0)); - List metas = params.get(GDSRESTConnector.QUERRY_METADATA); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_OS + SystemUtils.OS.get().getName())); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_ARCH + SystemUtils.ARCH.get().getName())); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_JAVA + TEST_JDK)); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_RELEASE + VERSION_STRING)); - } - - @Test - public void testMakeArtifactDownloadURL() { - String mockId = "mockArtifactId"; - URL artURL = testConnector.makeArtifactDownloadURL(mockId); - assertEquals(testURL + GDSRESTConnector.ENDPOINT_ARTIFACTS + mockId + GDSRESTConnector.ENDPOINT_DOWNLOAD, artURL.toString()); - } - - @Test - public void testFillBasics() throws MalformedURLException { - FileDownloader fd = new FileDownloader(TEST_ID, SystemUtils.toURL(testURL), this); - testConnector.fillBasics(fd); - Map header = fd.getRequestHeaders(); - assertEquals(GDSRESTConnector.HEADER_VAL_GZIP, header.get(GDSRESTConnector.HEADER_ENCODING)); - assertEquals(TEST_GDS_AGENT, header.get(GDSRESTConnector.HEADER_USER_AGENT)); - } - - @Test - public void testSendVerificationEmail() { - String tkn = testConnector.sendVerificationEmail(null, testURL, TEST_TOKEN_OLD); - assertEquals(TEST_TOKEN_OLD, tkn); - TestURLConnection tc = testConnector.conn; - assertEquals(TEST_TOKEN_REQUEST_ACCEPT, - tc.os.toString()); - assertTrue(tc.getDoOutput()); - Map> headers = tc.getRequestProperties(); - assertTrue(headers.size() == 2); - assertEquals(GDSRequester.HEADER_VAL_JSON, headers.get(GDSRequester.HEADER_CONTENT).get(0)); - assertEquals(TEST_GDS_AGENT, headers.get(GDSRESTConnector.HEADER_USER_AGENT).get(0)); - - testConnector.conn = null; - testConnector.is = new ByteArrayInputStream(TEST_TOKEN_RESPONSE.getBytes(UTF_8)); - - tkn = testConnector.sendVerificationEmail(TEST_EMAIL, testURL, null); - assertEquals(TEST_TOKEN, tkn); - tc = testConnector.conn; - assertEquals(TEST_TOKEN_REQUEST_GENERATE, - tc.os.toString()); - assertTrue(tc.getDoOutput()); - headers = tc.getRequestProperties(); - assertTrue(headers.size() == 2); - assertEquals(GDSRequester.HEADER_VAL_JSON, headers.get(GDSRequester.HEADER_CONTENT).get(0)); - assertEquals(TEST_GDS_AGENT, headers.get(GDSRESTConnector.HEADER_USER_AGENT).get(0)); - - testConnector.conn = null; - testConnector.is = new ByteArrayInputStream(WRONG_RESPONSE.getBytes(UTF_8)); - try { - testConnector.sendVerificationEmail(TEST_EMAIL, testURL, null); - fail("FailedOperationException expected."); - } catch (FailedOperationException ex) { - assertEquals("ERR_ResponseBody", ex.getMessage()); - // expected - } - tc = testConnector.conn; - assertEquals(TEST_TOKEN_REQUEST_GENERATE, - tc.os.toString()); - assertTrue(tc.getDoOutput()); - headers = tc.getRequestProperties(); - assertTrue(headers.size() == 2); - assertEquals(GDSRequester.HEADER_VAL_JSON, headers.get(GDSRequester.HEADER_CONTENT).get(0)); - assertEquals(TEST_GDS_AGENT, headers.get(GDSRESTConnector.HEADER_USER_AGENT).get(0)); - } - - @Test - public void testRevokeToken() { - testConnector.revokeToken(TEST_TOKEN); - TestURLConnection tc = testConnector.conn; - assertEquals(TEST_TOKEN_REVOKE, tc.os.toString()); - assertTrue(tc.getDoOutput()); - Map> headers = tc.getRequestProperties(); - assertTrue(headers.size() == 2); - assertEquals(GDSRequester.HEADER_VAL_JSON, headers.get(GDSRequester.HEADER_CONTENT).get(0)); - assertEquals(TEST_GDS_AGENT, headers.get(GDSRESTConnector.HEADER_USER_AGENT).get(0)); - } - - @Test - public void testRevokeTokens() { - testConnector.revokeTokens(TEST_EMAIL); - TestURLConnection tc = testConnector.conn; - assertEquals(TEST_TOKEN_REVOKE_ALL, tc.os.toString()); - assertTrue(tc.getDoOutput()); - Map> headers = tc.getRequestProperties(); - assertTrue(headers.size() == 2); - assertEquals(GDSRequester.HEADER_VAL_JSON, headers.get(GDSRequester.HEADER_CONTENT).get(0)); - assertEquals(TEST_GDS_AGENT, headers.get(GDSRESTConnector.HEADER_USER_AGENT).get(0)); - } - - private List checkBaseParams(String endpoint) { - Map> params = testConnector.testParams; - testConnector.getParams(); - assertTrue(testConnector.testParams.isEmpty()); - assertEquals(GDSRESTConnector.QUERRY_LIMIT_VAL, params.get(GDSRESTConnector.QUERRY_LIMIT_KEY).get(0)); - assertEquals(TEST_ID, params.get(GDSRESTConnector.QUERRY_PRODUCT).get(0)); - List metas = params.get(GDSRESTConnector.QUERRY_METADATA); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_OS + SystemUtils.OS.get().getName())); - assertTrue(metas.contains(GDSRESTConnector.QUERRY_ARCH + SystemUtils.ARCH.get().getName())); - assertEquals(endpoint, testConnector.endpoint); - return metas; - } - - static final class GDSTestConnector extends GDSRESTConnector { - String endpoint; - Map> testParams; - TestURLConnection conn = null; - ByteArrayInputStream is = new ByteArrayInputStream(TEST_TOKEN_RESPONSE.getBytes(UTF_8)); - - GDSTestConnector(String baseURL, Feedback feedback, String productId, Version gvmVersion) { - super(baseURL, feedback, productId, gvmVersion); - } - - @Override - public Map> getParams() { - // used to build URL querry then cleared - Map> parms = super.getParams(); - testParams = Map.copyOf(parms); - return Collections.emptyMap(); - } - - @Override - protected FileDownloader obtain(String endp) { - this.endpoint = endp; - // endpoint is appended to baseURL - return super.obtain(""); - } - - @Override - GDSRequester getGDSRequester(String acceptLicLink, String licID) throws MalformedURLException { - return new TestGDSRequester(SystemUtils.toURL(acceptLicLink), licID); - } - - final class TestGDSRequester extends GDSRESTConnector.GDSRequester { - TestURLConnectionFactory fac = new TestURLConnectionFactory(); - - TestGDSRequester(URL licenseUrl, String licID) { - super(licenseUrl, licID); - } - - @Override - URLConnectionFactory getConnectionFactory() throws MalformedURLException { - return fac; - } - - final class TestURLConnectionFactory implements URLConnectionFactory { - - @Override - public URLConnection createConnection(URL u, Configure configCallback) throws IOException { - if (conn == null) { - conn = new TestURLConnection(u); - configCallback.accept(conn); - } - return conn; - } - - final class TestURLConnection extends URLConnection { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - - TestURLConnection(URL url) { - super(url); - } - - @Override - public void connect() throws IOException { - } - - @Override - public OutputStream getOutputStream() throws IOException { - return os; - } - - @Override - public InputStream getInputStream() throws IOException { - return is; - } - } - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSTokenStorageTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSTokenStorageTest.java deleted file mode 100644 index 79973846e7a7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/GDSTokenStorageTest.java +++ /dev/null @@ -1,279 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.CommandTestBase; -import static org.graalvm.component.installer.CommonConstants.PATH_GDS_CONFIG; -import static org.graalvm.component.installer.CommonConstants.PATH_USER_GU; -import static org.graalvm.component.installer.CommonConstants.SYSPROP_USER_HOME; -import org.graalvm.component.installer.gds.GdsCommands; -import static org.graalvm.component.installer.gds.rest.GDSTokenStorage.GRAAL_EE_DOWNLOAD_TOKEN; -import static org.graalvm.component.installer.gds.rest.GDSTokenStorage.Source; -import org.graalvm.component.installer.MemoryFeedback.Case; -import org.graalvm.component.installer.MemoryFeedback; -import static org.graalvm.component.installer.gds.rest.TestGDSTokenStorage.testPath; -import org.junit.After; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Before; -import org.junit.Test; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Properties; - -/** - * - * @author odouda - */ -public class GDSTokenStorageTest extends CommandTestBase { - static final Path tstPath = Path.of(System.getProperty(SYSPROP_USER_HOME), PATH_USER_GU, PATH_GDS_CONFIG + "test"); - static final String MOCK_TOKEN_DEFAULT = "MOCK_TOKEN_DEFAULT"; - static final String MOCK_TOKEN_ENV = "MOCK_TOKEN_ENV"; - static final String MOCK_TOKEN_USER = "MOCK_TOKEN_USER"; - static final String MOCK_EMAIL = "some@mock.email"; - - MemoryFeedback mf; - TestGDSTokenStorage ts; - - @Override - @Before - public void setUp() throws Exception { - super.setUp(); - delegateFeedback(mf = new MemoryFeedback()); - reload(); - clean(); - } - - @After - public void tearDown() throws IOException { - clean(); - assertTrue(mf.toString(), mf.isEmpty()); - } - - private void reload() { - ts = new TestGDSTokenStorage(this, this); - } - - private static void clean() throws IOException { - Files.deleteIfExists(testPath); - Files.deleteIfExists(tstPath); - } - - @Test - public void testPropPath() { - Path pth = new GDSTokenStorage(this, this).getPropertiesPath(); - assertEquals(Path.of(System.getProperty(SYSPROP_USER_HOME), PATH_USER_GU, PATH_GDS_CONFIG), pth); - } - - @Test - public void testGetTokenSource() throws IOException { - assertEquals(Source.NON, ts.getConfSource()); - - assertTokenSource(null, Source.NON); - - store(testPath, "SOME_DIFFERENT_KEY", MOCK_TOKEN_DEFAULT); - assertTokenSource(null, Source.NON); - - store(testPath, GRAAL_EE_DOWNLOAD_TOKEN, MOCK_TOKEN_DEFAULT); - assertTokenSource(MOCK_TOKEN_DEFAULT, Source.FIL); - - envParameters.put(GRAAL_EE_DOWNLOAD_TOKEN, MOCK_TOKEN_ENV); - assertTokenSource(MOCK_TOKEN_ENV, Source.ENV); - - options.put(GdsCommands.OPTION_GDS_CONFIG, tstPath.toString()); - store(tstPath, GRAAL_EE_DOWNLOAD_TOKEN, MOCK_TOKEN_USER); - assertTokenSource(MOCK_TOKEN_USER, Source.CMD); - - store(tstPath, GRAAL_EE_DOWNLOAD_TOKEN, ""); - assertTokenSource(MOCK_TOKEN_ENV, Source.ENV); - - envParameters.put(GRAAL_EE_DOWNLOAD_TOKEN, ""); - assertTokenSource(MOCK_TOKEN_DEFAULT, Source.FIL); - - store(testPath, GRAAL_EE_DOWNLOAD_TOKEN, ""); - assertTokenSource(null, Source.NON); - - try (OutputStream os = Files.newOutputStream(ts.getPropertiesPath())) { - os.write("key1=foo\\u0123\nkey2=bar\\u0\\n".getBytes()); - os.flush(); - } - reload(); - ts.getToken(); - mf.checkMem(Case.ERR, "ERR_CouldNotLoadToken", ts.getPropertiesPath(), "Malformed \\uxxxx encoding."); - } - - @Test - public void testSetToken() { - assertEquals(null, ts.getToken()); - assertEquals(Source.NON, ts.getConfSource()); - - ts.setToken(MOCK_TOKEN_DEFAULT); - assertEquals(MOCK_TOKEN_DEFAULT, ts.getToken()); - assertEquals(Source.FIL, ts.getConfSource()); - - ts.setToken(""); - assertEquals(null, ts.getToken()); - assertEquals(Source.NON, ts.getConfSource()); - - try { - ts.setToken(null); - fail("Expected IllegalArgumentException."); - } catch (IllegalArgumentException ex) { - // expected - } - } - - @Test - public void testSave() throws IOException { - assertTokenSource(null, Source.NON); - ts.setToken(MOCK_TOKEN_DEFAULT); - assertTokenSource(null, Source.NON); - ts.setToken(MOCK_TOKEN_DEFAULT); - ts.save(); - assertTokenSource(MOCK_TOKEN_DEFAULT, Source.FIL); - } - - @Test - public void testPrintToken() throws IOException { - ts.printToken(); - store(testPath, GRAAL_EE_DOWNLOAD_TOKEN, MOCK_TOKEN_DEFAULT); - reload(); - ts.printToken(); - envParameters.put(GRAAL_EE_DOWNLOAD_TOKEN, MOCK_TOKEN_ENV); - ts.printToken(); - options.put(GdsCommands.OPTION_GDS_CONFIG, tstPath.toString()); - store(tstPath, GRAAL_EE_DOWNLOAD_TOKEN, MOCK_TOKEN_USER); - ts.printToken(); - mf.checkMem(Case.MSG, "MSG_EmptyToken", null, ""); - mf.checkMem(Case.FRM, "MSG_PrintTokenFile", testPath.toString()); - mf.checkMem(Case.MSG, "MSG_PrintToken", MOCK_TOKEN_DEFAULT, "MSG_PrintTokenFile"); - mf.checkMem(Case.FRM, "MSG_PrintTokenEnv", GRAAL_EE_DOWNLOAD_TOKEN); - mf.checkMem(Case.MSG, "MSG_PrintToken", MOCK_TOKEN_ENV, "MSG_PrintTokenEnv"); - mf.checkMem(Case.FRM, "MSG_PrintTokenCmdFile", tstPath.toString()); - mf.checkMem(Case.MSG, "MSG_PrintToken", MOCK_TOKEN_USER, "MSG_PrintTokenCmdFile"); - } - - @Test - public void testRevokeToken() { - ts.revokeToken(null); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoRevokableToken"); - - ts.revokeToken(""); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoRevokableToken"); - - ts.revokeToken(MOCK_TOKEN_DEFAULT); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "GDSRESTConnector.revokeToken:" + MOCK_TOKEN_DEFAULT); - mf.checkMem(Case.MSG, "MSG_AcceptRevoke"); - - ts.setToken(MOCK_TOKEN_DEFAULT); - assertEquals(MOCK_TOKEN_DEFAULT, ts.getToken()); - ts.revokeToken(null); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "GDSRESTConnector.revokeToken:" + MOCK_TOKEN_DEFAULT); - mf.checkMem(Case.MSG, "MSG_AcceptRevoke"); - - ts.makeConn = false; - - ts.revokeToken(null); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoGDSAddress"); - - ts.revokeToken(""); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoGDSAddress"); - - ts.revokeToken(MOCK_TOKEN_DEFAULT); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoGDSAddress"); - - ts.setToken(MOCK_TOKEN_DEFAULT); - assertEquals(MOCK_TOKEN_DEFAULT, ts.getToken()); - ts.revokeToken(null); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoGDSAddress"); - } - - @Test - public void testRevokeAllTokens() { - ts.revokeAllTokens(null); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoEmail"); - - ts.revokeAllTokens(""); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoEmail"); - - try { - ts.revokeAllTokens(MOCK_TOKEN_DEFAULT); - fail("Expected FailedOperationException."); - } catch (org.graalvm.component.installer.FailedOperationException ex) { - assertEquals("ERR_EmailNotValid", ex.getMessage()); - } - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - - ts.revokeAllTokens(MOCK_EMAIL); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "GDSRESTConnector.revokeTokens:" + MOCK_EMAIL); - mf.checkMem(Case.MSG, "MSG_AcceptRevoke"); - - ts.makeConn = false; - - ts.revokeAllTokens(null); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoGDSAddress"); - - ts.revokeAllTokens(""); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoGDSAddress"); - - ts.revokeAllTokens(MOCK_TOKEN_DEFAULT); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoGDSAddress"); - - ts.revokeAllTokens(MOCK_EMAIL); - mf.checkMem(Case.MSG, "GDSTokenStorage.makeConnector"); - mf.checkMem(Case.MSG, "MSG_NoGDSAddress"); - } - - private void assertTokenSource(String tkn, Source src) { - reload(); - assertEquals(tkn, ts.getToken()); - assertEquals(src, ts.getConfSource()); - } - - private static void store(Path dest, String key, String val) throws IOException { - Properties props = new Properties(); - props.put(key, val); - try (OutputStream os = Files.newOutputStream(dest)) { - props.store(os, null); - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/TestGDSTokenStorage.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/TestGDSTokenStorage.java deleted file mode 100644 index e394bbe34226..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/TestGDSTokenStorage.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.CommandInput; -import static org.graalvm.component.installer.CommonConstants.PATH_GDS_CONFIG; -import static org.graalvm.component.installer.CommonConstants.PATH_USER_GU; -import static org.graalvm.component.installer.CommonConstants.SYSPROP_USER_HOME; -import org.graalvm.component.installer.Feedback; -import java.nio.file.Path; -import org.graalvm.component.installer.Version; - -/** - * - * @author odouda - */ -class TestGDSTokenStorage extends GDSTokenStorage { - static Path testPath = Path.of(System.getProperty(SYSPROP_USER_HOME), PATH_USER_GU, "test" + PATH_GDS_CONFIG); - private Feedback fb; - - TestGDSTokenStorage(Feedback feedback, CommandInput input) { - super(feedback, input); - fb = feedback.withBundle(GDSChannel.class); - } - - @Override - public Path getPropertiesPath() { - return testPath; - } - - public boolean makeConn = true; - - @Override - protected GDSRESTConnector makeConnector() { - fb.verbatimOut("GDSTokenStorage.makeConnector", false); - return makeConn ? new GDSRESTConnector("http://mock.url", fb, PATH_USER_GU, Version.fromString("1.0.0")) { - @Override - public void revokeToken(String token) { - fb.verbatimOut("GDSRESTConnector.revokeToken:" + token, false); - } - - @Override - public void revokeTokens(String mail) { - fb.verbatimOut("GDSRESTConnector.revokeTokens:" + mail, false); - } - } : null; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/data/gdsreleases.json b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/data/gdsreleases.json deleted file mode 100644 index 8710707794ef..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/gds/rest/data/gdsreleases.json +++ /dev/null @@ -1,9676 +0,0 @@ -{ - "items": [ - { - "id": "DC0D45769EBF406EE0538714000A4386", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso-llvm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - } - ], - "displayName": "Java on Truffle LLVM Java libraries macos amd64 22.1.0 jdk17 ee", - "checksum": "3f86f93cc44998b86aa6a9a5e59b31f0a35e8b5692cca42b6b04b485636c6b5c", - "status": "PUBLISHED", - "timeCreated": "2022-04-07T13:08:39.568Z" - }, - { - "id": "DC04E2FBFA88CE4EE0538714000A1AA0", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso-llvm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - } - ], - "displayName": "Java on Truffle LLVM Java libraries macos amd64 22.1.0 jdk11 ee", - "checksum": "8cb10b44752cbea9a4f37aea66d6a9f273b265fb6c0d718ed6d7058ab1f0965e", - "status": "PUBLISHED", - "timeCreated": "2022-04-07T13:08:30.900Z" - }, - { - "id": "DC0D45769E5D406EE0538714000A4386", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso-llvm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - } - ], - "displayName": "Java on Truffle LLVM Java libraries macos amd64 22.2.0 jdk17 ee", - "checksum": "a5b4a77200007fb1d52344981e0c803d394aae8c6029ecf279ddff0a2a45f34a", - "status": "PUBLISHED", - "timeCreated": "2022-04-07T12:49:42.520Z" - }, - { - "id": "DC02FD0B9C72B342E0538714000ACF2A", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso-llvm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - } - ], - "displayName": "Java on Truffle LLVM Java libraries macos amd64 22.2.0 jdk11 ee", - "checksum": "71b26f91df8727a548aba9394943ee3221bc2a9062d7f44e252dae8cc65480a3", - "status": "PUBLISHED", - "timeCreated": "2022-04-07T12:49:31.738Z" - }, - { - "id": "DBD255350DBD2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm windows amd64 22.2.0 jdk17 ee", - "checksum": "6560d7d558cfe40143f57648e2768fbd29ce1ec6a24d6b10cf6f08d2040215f0", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:46:07.030Z" - }, - { - "id": "DBD255350DAF2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle windows amd64 22.2.0 jdk17 ee", - "checksum": "94be13b56e82187e3c7f51a3ddc78d7c553d3e101318dfc6f47bc0725a4bf9f7", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:46:05.735Z" - }, - { - "id": "DBD255350DA02F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs windows amd64 22.2.0 jdk17 ee", - "checksum": "9ac3c76459c7915de387d06d278ef5713b013dda5d4218e9f37d88607561d9b6", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:46:04.443Z" - }, - { - "id": "DBD255350D932F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image windows amd64 22.2.0 jdk17 ee", - "checksum": "aacc592d961c2d1d078d93e0a0decfe2fbf4e4e503f03ee11a1caba7f784e403", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:46:03.144Z" - }, - { - "id": "DBD255350D8A2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core windows amd64 22.2.0 jdk17 ee", - "checksum": "bd45903f9b58b28d9ff53346655eb39f6be6050b2133edfcf6ca1b9f05282128", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:46:01.858Z" - }, - { - "id": "DBD255350D822F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.2.0 on jdk17 windows amd64", - "checksum": "12ad12141f08712c200c8352b884b8f1eeb8b3c0dfee3b87c76ed05355ab701d", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:46:00.605Z" - }, - { - "id": "DBD255350D752F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain macos amd64 22.2.0 jdk17 ee", - "checksum": "e3239f0d39924f8f53e6a35e3901a8ed64f9b83eeda15ebb75f5f1b15f438320", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:59.416Z" - }, - { - "id": "DBD255350D672F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm macos amd64 22.2.0 jdk17 ee", - "checksum": "1fb9daf6fb2bff476bed9bdafad7a655bbe2ed864096c0cadc935416c6e3964a", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:58.115Z" - }, - { - "id": "DBD255350D582F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.python", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/python", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.Python macos amd64 22.2.0 jdk17 ee", - "checksum": "424b5e6c5bfb8c6d4d87ed9147d06ee5498f1944d4d4f492bd8cdc23e3690faf", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:56.782Z" - }, - { - "id": "DBD255350D492F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby macos amd64 22.2.0 jdk17 ee", - "checksum": "d5e44c0c6238daa5e695b94f678a9a4427df5ca40e5ffcda698c5150214da8dc", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:55.484Z" - }, - { - "id": "DBD25450B9703307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle macos amd64 22.2.0 jdk17 ee", - "checksum": "e849dcd29d74aa0235aadda72ea4a23c6c85d9dbdcfd3dd69fe99f8acb07cbf1", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:54.054Z" - }, - { - "id": "DBD255350D3A2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs macos amd64 22.2.0 jdk17 ee", - "checksum": "295ea335c67036302a03d6a1f33d90320c7ac4ad133752c4f67039ec3cdf61e0", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:52.801Z" - }, - { - "id": "DBD255350D2D2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image macos amd64 22.2.0 jdk17 ee", - "checksum": "dc8e5f940260fb0a5fdacd68ab9136cafcf69806420e6112f94b40f14ff2b919", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:51.388Z" - }, - { - "id": "DBD25450B9673307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core macos amd64 22.2.0 jdk17 ee", - "checksum": "26dd2f88d8bffa535756a74ae76c6c8d18f9de0d4511eaf870a3cf27f4defa27", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:50.172Z" - }, - { - "id": "DBD25450B95F3307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.2.0 on jdk17 darwin amd64", - "checksum": "4730d1ef0a7126a15c1a388ffd99c0e1ff2783676bc4996acb657a7fff6a0139", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:49.020Z" - }, - { - "id": "DBD255350D202F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain linux aarch64 22.2.0 jdk17 ee", - "checksum": "66e9a79380202c2fc954e83f1856b69c8edde3909e5191708166f849c3037fda", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:47.696Z" - }, - { - "id": "DBD206227B6A3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm linux aarch64 22.2.0 jdk17 ee", - "checksum": "251076be28a1419773fe7c1050f399acf626d4a9918ec212fbc82bba6b080b3b", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:46.280Z" - }, - { - "id": "DBD206227B5B3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby linux aarch64 22.2.0 jdk17 ee", - "checksum": "57554962809ba66cd8e63613194a63ead817f24afc12c8dcced7feb0c2b74ae8", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:44.880Z" - }, - { - "id": "DBD255350D122F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle linux aarch64 22.2.0 jdk17 ee", - "checksum": "4674692f9469edcfa83fe230d3c7d942ba26557a403efcd431ad5da7d1358eb5", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:43.593Z" - }, - { - "id": "DBD206227B4D3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm windows amd64 22.2.0 jdk11 ee", - "checksum": "307bdc705411bc07a834b175acf3a6ea048a12d0d31b8635004f1a6a9124ef3c", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:43.331Z" - }, - { - "id": "DBD206227B3E3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs linux aarch64 22.2.0 jdk17 ee", - "checksum": "e896ed6ad4e9588e0a8c9e4b10d3138eb98116d9d1f0517aaeca273c71641e56", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:42.309Z" - }, - { - "id": "DBD255350D042F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle windows amd64 22.2.0 jdk11 ee", - "checksum": "b4c02b54a1c8a8ee03b129e180104e6997cc6522e501c1adfe2c2d7ff246bf3d", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:42.036Z" - }, - { - "id": "DBD255350CF72F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image linux aarch64 22.2.0 jdk17 ee", - "checksum": "f77427d240c48b1dc8d0b02d7212016c73518f359a2706486a2f803804ed6579", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:41.074Z" - }, - { - "id": "DBD206227B2F3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs windows amd64 22.2.0 jdk11 ee", - "checksum": "a1bfd2bb5343d0e12e0d025804e54d0801977a335b792fdb33e58eaab71197b8", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:40.768Z" - }, - { - "id": "DBD206227B263259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core linux aarch64 22.2.0 jdk17 ee", - "checksum": "0528b454f95bbd7aac53f9982faa1a48e2a64286378a7075c6bd0f21246eb20b", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:39.781Z" - }, - { - "id": "DBD255350CEA2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image windows amd64 22.2.0 jdk11 ee", - "checksum": "1a699587304dc71ad40fc8cb8f5587bb50e385b9ba15c64fa299bc1b41c0ca8f", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:39.477Z" - }, - { - "id": "DBD206227B1E3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.2.0 on jdk17 linux aarch64", - "checksum": "f015e8cbbf97d6535fa76657335f766e60f2aa5395275b7e2edc31b75f69d762", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:38.630Z" - }, - { - "id": "DBD255350CE12F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core windows amd64 22.2.0 jdk11 ee", - "checksum": "5bffeac3f90da3c781113045cb2b793fc5a631652e42a3da7c03ff2ffcace287", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:38.153Z" - }, - { - "id": "DBD206227B113259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain linux amd64 22.2.0 jdk17 ee", - "checksum": "afc469b00c91847be85f240cddc7af8f2baddcae2799a7213b34acb2a8f4836b", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:37.495Z" - }, - { - "id": "DBD206227B093259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.2.0 on jdk11 windows amd64", - "checksum": "f843cb1068fcfab011182f1b3adf5a0e510fd6dd89ee4ee43d4747dedfa15534", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:37.035Z" - }, - { - "id": "DBD206227AFA3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso-llvm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle LLVM Java libraries linux amd64 22.2.0 jdk17 ee", - "checksum": "ae39bc58ffeb4b63312d27dc8a79e17575424470fe3ce8216690dda9b4e4bbd6", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:36.207Z" - }, - { - "id": "DBD255350CD42F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain macos amd64 22.2.0 jdk11 ee", - "checksum": "37c54e93d56eb961e05d1ddce99254627fde02e610bcc9a097f100c505c56e02", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:35.889Z" - }, - { - "id": "DBD25450B9513307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm linux amd64 22.2.0 jdk17 ee", - "checksum": "4d545378b7b7c121d09f08c09320c6d5a493e92729d50ed3ff0893da1a209384", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:34.928Z" - }, - { - "id": "DBD255350CC62F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm macos amd64 22.2.0 jdk11 ee", - "checksum": "f6b338fe0fbca0967be0b34960a92a7fd860a2dd7fc723eabb418260c7b55d4a", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:34.474Z" - }, - { - "id": "DBD255350CB72F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.python", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/python", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.Python linux amd64 22.2.0 jdk17 ee", - "checksum": "3ddd45cd1ecb2df95bef345a2f22f86744610b21b80b5792f376ba8aa38f71af", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:33.506Z" - }, - { - "id": "DBD206227AEB3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.python", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/python", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.Python macos amd64 22.2.0 jdk11 ee", - "checksum": "069a4089318aacff56dff46d76d9b098586b30f5c02aa73a44cbd8976f770d6b", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:33.175Z" - }, - { - "id": "DBD255350CA82F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby linux amd64 22.2.0 jdk17 ee", - "checksum": "c7eb2dee3692a8bf7f8590c96c99f0d3bdd3af17ad02647eb13b94e2fe3f2181", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:32.205Z" - }, - { - "id": "DBD25450B9423307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby macos amd64 22.2.0 jdk11 ee", - "checksum": "be38fff57316b909ef0695510a19671a6db1ac83a5c55a52c1da02b5a6a1d0f5", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:31.822Z" - }, - { - "id": "DBD206227ADC3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle linux amd64 22.2.0 jdk17 ee", - "checksum": "d7869b7bba6dac2c60f76e58cd9a6b5eadabfc6a18552a99b60f22b6bb13b74c", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:30.549Z" - }, - { - "id": "DBD255350C9A2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle macos amd64 22.2.0 jdk11 ee", - "checksum": "b30ce36cd913e2d36c3f3254199249dd26e2051d6aea0891cd1ec9d9e0ce8646", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:30.492Z" - }, - { - "id": "DBD25450B9333307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs linux amd64 22.2.0 jdk17 ee", - "checksum": "5e1cef1f3689371c9e39c30ce335cde999534a860a7743c5768e61f80bb395b6", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:29.265Z" - }, - { - "id": "DBD25450B9243307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs macos amd64 22.2.0 jdk11 ee", - "checksum": "4afdb1da810776d3514b7e190be5234a5081257cdd5797bb49fd9f41e3600107", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:28.967Z" - }, - { - "id": "DBD25450B9173307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image linux amd64 22.2.0 jdk17 ee", - "checksum": "88c56f763d686a71bba3806de04829650c0fc370f013e3b4f5df589541c0cbed", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:27.700Z" - }, - { - "id": "DBD255350C8D2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image macos amd64 22.2.0 jdk11 ee", - "checksum": "f8230f8bfb51cf9f9671b4f78db8ace31fbe74d53cbfc702d5931de24d22f3d5", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:27.679Z" - }, - { - "id": "DBD255350C842F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core macos amd64 22.2.0 jdk11 ee", - "checksum": "bcf84250ef8154e49d4b41ff60cc289c7c3980bd783737ae2c4a7578b049db51", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:26.474Z" - }, - { - "id": "DBD206227AD33259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core linux amd64 22.2.0 jdk17 ee", - "checksum": "2d8d5c8215db45528da319fafe34c6369fcffc0ef8b0d3e6891b4e3ea4c22e7b", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:26.435Z" - }, - { - "id": "DBD206227ACB3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.2.0 on jdk11 darwin amd64", - "checksum": "29198b90900629cbb2587a13b37258eb6ca9f93ec18b1cf42f3f37683e797749", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:25.218Z" - }, - { - "id": "DBD206227AC33259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.2.0 on jdk17 linux amd64", - "checksum": "e7da04e927ecb28bf345702c5fe98aade1901c6f742d3f6ff1b157b82accc94c", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:24.919Z" - }, - { - "id": "DBD206227AB63259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain linux aarch64 22.2.0 jdk11 ee", - "checksum": "b7c808d1dc1f2e6d4d26b8fa9fa488e3c34f5422a5f350f4fb6eb6cc162124ac", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:23.962Z" - }, - { - "id": "DBD25450B9093307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm linux aarch64 22.2.0 jdk11 ee", - "checksum": "8d45638561e1486dad0a28c4f3f2ab175d6e3483bfde1cb3c4f7da6a505f3cc9", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:22.676Z" - }, - { - "id": "DBD206227AA73259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby linux aarch64 22.2.0 jdk11 ee", - "checksum": "7450b2106e745ee07b623d5577929174d72e065f1986ac51cabb5eba3d087af2", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:21.394Z" - }, - { - "id": "DBD206227A993259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle linux aarch64 22.2.0 jdk11 ee", - "checksum": "f0706d2695c1bc5ca13d7d470b98d37edda8ed8db56917f829116bff1dd19f86", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:20.131Z" - }, - { - "id": "DBD206227A8A3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs linux aarch64 22.2.0 jdk11 ee", - "checksum": "bdaf1a2b19d1eaf669355944c02250e44a2b85396fe1555a28c2560e48ea0ab3", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:18.808Z" - }, - { - "id": "DBD206227A7D3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image linux aarch64 22.2.0 jdk11 ee", - "checksum": "f37b23cbc162650b7047dff60d28acebdeb4f7968253c892cc38a9122b14acf4", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:17.553Z" - }, - { - "id": "DBD206227A743259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core linux aarch64 22.2.0 jdk11 ee", - "checksum": "0e00306b0b906c9e36d27f7ff5fc7bfa18d9cd0ff50de1017b26ab79da6b4288", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:16.183Z" - }, - { - "id": "DBD206227A6C3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.2.0 on jdk11 linux aarch64", - "checksum": "785c4d637f350abc4499ff5fe64a0f259234efd6c44c202ce291956a0135be81", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:15.065Z" - }, - { - "id": "DBD206227A5F3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain linux amd64 22.2.0 jdk11 ee", - "checksum": "2afcc41b5241170dacaf1d3817eb9c01232303479dcdcf289e60f3a96e489921", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:13.869Z" - }, - { - "id": "DBD206227A503259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso-llvm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle LLVM Java libraries linux amd64 22.2.0 jdk11 ee", - "checksum": "1d88d354def0132ebb7eb7b4af7c5fd39a3e2d9c6f039d8a8049ed5b6f28cfc4", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:12.481Z" - }, - { - "id": "DBD206227A423259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm linux amd64 22.2.0 jdk11 ee", - "checksum": "fb35b451af72c1cd66f1221c6596120e6780c0295a61ff900254caed9307d60c", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:11.081Z" - }, - { - "id": "DBD206227A333259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.python", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/python", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.Python linux amd64 22.2.0 jdk11 ee", - "checksum": "1fdd8a83aa176059d99a7656342309b44a11309f0455ba6d4851449911d7a6bd", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:09.799Z" - }, - { - "id": "DBD255350C752F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby linux amd64 22.2.0 jdk11 ee", - "checksum": "ec15f8e6a2f634cebdb9292fa49f445776521ce9038e1ba221e304f8f809c5c8", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:08.374Z" - }, - { - "id": "DBD25450B8FA3307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle linux amd64 22.2.0 jdk11 ee", - "checksum": "cadc60d80a054114759e8c5bc3071c0fef5f5453b501635593405e7904288c8c", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:07.075Z" - }, - { - "id": "DBD25450B8EB3307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs linux amd64 22.2.0 jdk11 ee", - "checksum": "60f2470a8acc676b03a1c2fe1cbea4bbac8f13e75aa0a53e53e8c61743e42a5f", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:05.535Z" - }, - { - "id": "DBD255350C682F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.2.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image linux amd64 22.2.0 jdk11 ee", - "checksum": "f01b37fd2b4260711e6261b09fedbe1bff455294f9fe77621298bf5c2b8ee91e", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:03.858Z" - }, - { - "id": "DBD255350C5F2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core linux amd64 22.2.0 jdk11 ee", - "checksum": "2a55e7d9e8da68eda0bdd0bb125cf8aec1ac4aa5b85d92c30852acc309aaf34d", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:02.440Z" - }, - { - "id": "DBD206227A2B3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.2.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.2.0 on jdk11 linux amd64", - "checksum": "6a907488a6774982b63b48fd3c0ae1918fb163c6d232fc91a9a1731f34195f32", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:45:00.849Z" - }, - { - "id": "DBD255350C512F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm windows amd64 22.1.0 jdk17 ee", - "checksum": "620f5bc3ebb7b0855902147c69590e4a1f5c2311c0530bb66eb3d282cc6f2878", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:44.653Z" - }, - { - "id": "DBD25450B8DD3307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle windows amd64 22.1.0 jdk17 ee", - "checksum": "f5042b8ac43297d5fad5126d7f69f6a397548c0ea3ac1da1843417fa8067fa02", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:43.178Z" - }, - { - "id": "DBD255350C422F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs windows amd64 22.1.0 jdk17 ee", - "checksum": "33b262664d364d8c08c131d51d3054d211fc62c8348bf104034cf6f64088b0b3", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:41.913Z" - }, - { - "id": "DBD255350C352F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image windows amd64 22.1.0 jdk17 ee", - "checksum": "ac4c0080cc4a6e17e9531f1db61a31953c287f73c388ed205fd84f702962f53a", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:40.568Z" - }, - { - "id": "DBD255350C2C2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=windows)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core windows amd64 22.1.0 jdk17 ee", - "checksum": "f4a1da20867e7727a3c79f5937c2b655ab07218de07a6beac2239687b130db73", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:39.242Z" - }, - { - "id": "DBD206227A223259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.1.0 on jdk17 windows amd64", - "checksum": "637dd02a6d7e5e5a635157eb1c364f0eafe9a32a92a913aef831a602a7188327", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:38.071Z" - }, - { - "id": "DBD255350C1F2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain macos amd64 22.1.0 jdk17 ee", - "checksum": "8966eda0f2cff318c4a9dea6749bb8ca98b02a84f1de3f7cb252c3a5d9aacac0", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:36.892Z" - }, - { - "id": "DBD255350C112F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm windows amd64 22.1.0 jdk11 ee", - "checksum": "2e89ea20945dd5115f66655b193da708bf142e3991cc9fccdc588a79e1aa2423", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:36.484Z" - }, - { - "id": "DBD255350C032F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm macos amd64 22.1.0 jdk17 ee", - "checksum": "69725444da99014ae04ea7a42825cca5feff793c01fb26dce60511ccc925920d", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:35.532Z" - }, - { - "id": "DBD206227A143259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle windows amd64 22.1.0 jdk11 ee", - "checksum": "a57051bcb74078c4d6ba6acbe3fa0a328d2e7ccea40b6a5d14692c88593a1a65", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:35.136Z" - }, - { - "id": "DBD206227A053259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.python", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/python", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.Python macos amd64 22.1.0 jdk17 ee", - "checksum": "128e0a678d0574dafb95e6718c0604e419d89c5169d5e7fda3367050d9257067", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:34.202Z" - }, - { - "id": "DBD255350BF42F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages\\nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs windows amd64 22.1.0 jdk11 ee", - "checksum": "466df4c0ee0bec23412be6f502921149cc0cb7ecccac2838d9e60ffd29eed59d", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:33.807Z" - }, - { - "id": "DBD255350BE52F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby macos amd64 22.1.0 jdk17 ee", - "checksum": "6ce7af7a23fb4c81ffb394718f75eb22c942242280db5e87e4afd63a5c11cf39", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:32.736Z" - }, - { - "id": "DBD255350BD82F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image windows amd64 22.1.0 jdk11 ee", - "checksum": "9413f9568c3266926d5db38e17928b134f110f084530cae191cbd32724340c8a", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:31.960Z" - }, - { - "id": "DBD2062279F73259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - } - ], - "displayName": "Java on Truffle macos amd64 22.1.0 jdk17 ee", - "checksum": "53fe8597cc413ef2aeb399a8f72d452f9f4014fdc76a641d19f911ca3368591b", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:31.368Z" - }, - { - "id": "DBD255350BCF2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=windows)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core windows amd64 22.1.0 jdk11 ee", - "checksum": "920d0d48ec3d72e61f88b240c3b802f9cd721f2214be8e5b3f6d8ea62034c2b2", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:30.564Z" - }, - { - "id": "DBD255350BC02F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs macos amd64 22.1.0 jdk17 ee", - "checksum": "d342707334c6b32763bef5f13f941992ddd8a1f5dce7ddc3f80b0a02e45f0a69", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:30.038Z" - }, - { - "id": "DBD255350BB82F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "windows", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.1.0 on jdk11 windows amd64", - "checksum": "962fd2ddf7de419c60768720cdfc2cf030f961a497b5d25dba801f1101c454a3", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:29.244Z" - }, - { - "id": "DBD25450B8D03307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image macos amd64 22.1.0 jdk17 ee", - "checksum": "6cbe622afd6438cf193fce5e2395a1493bf59cfd9821176dd85e1a0f8e48c430", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:28.695Z" - }, - { - "id": "DBD255350BAB2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain macos amd64 22.1.0 jdk11 ee", - "checksum": "7aee6d0fec0d1bc3a01ae82a1401bedf6d75aceb7405a044f60b71271ec78c44", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:28.031Z" - }, - { - "id": "DBD255350BA22F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=macos)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core macos amd64 22.1.0 jdk17 ee", - "checksum": "a38dea30d61647ae0f51a841408884cf97d4ec4f7e5ae6bc2d039deff3c441f6", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:27.348Z" - }, - { - "id": "DBD255350B942F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm macos amd64 22.1.0 jdk11 ee", - "checksum": "aad31a5483add56a5f0c7375c1123d66ff85c1b589858c97f3d15c6382b9ad8d", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:25.291Z" - }, - { - "id": "DBD255350B8C2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.1.0 on jdk17 darwin amd64", - "checksum": "28d80a7a959ec9a1198af8740b86dde19aa9fc9223492cfe82fd5df0cac6eeee", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:24.781Z" - }, - { - "id": "DBD255350B7D2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.python", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/python", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.Python macos amd64 22.1.0 jdk11 ee", - "checksum": "75f11dae4d2d1c4567beace4b7ebe4e4869b0b07d8e9b3e18d1262ed6d596540", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:23.901Z" - }, - { - "id": "DBD2062279EA3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain linux aarch64 22.1.0 jdk17 ee", - "checksum": "27bf57e667f67e4d8d80fac62cecc3ecba5da1846af2326d3985633f59268d1b", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:23.600Z" - }, - { - "id": "DBD2062279DB3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby macos amd64 22.1.0 jdk11 ee", - "checksum": "ed278b0c7d39ef2aeb9d89d0aed3a0ecd2259773b7a0ddb8ab7b99587cd2d1bd", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:22.564Z" - }, - { - "id": "DBD255350B6F2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm linux aarch64 22.1.0 jdk17 ee", - "checksum": "2eda17d89b9e8852d61e5e54b78e5f1f1110377380cab317794b2aee0ebb5bb2", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:22.284Z" - }, - { - "id": "DBD255350B612F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle macos amd64 22.1.0 jdk11 ee", - "checksum": "e0151801b99bd08ec4ff4cc2c61293334a820eccd5ba3f0d432322e472cee744", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:21.252Z" - }, - { - "id": "DBD2062279CC3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby linux aarch64 22.1.0 jdk17 ee", - "checksum": "f32ee527b511c23beba291f1afd790204bbcb2bca9f107142d4636a797386ffe", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:20.880Z" - }, - { - "id": "DBD255350B522F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs macos amd64 22.1.0 jdk11 ee", - "checksum": "34ffca39b884e53376b0d655dfe600a508472c7ef4330eb6ceb0a165713e7927", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:19.876Z" - }, - { - "id": "DBD2062279BF3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image macos amd64 22.1.0 jdk11 ee", - "checksum": "70cfc17667e66e7d36e5330392ae715b7c4b54d8ded82ca1f4103db2b3f957af", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:18.552Z" - }, - { - "id": "DBD255350B442F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle linux aarch64 22.1.0 jdk17 ee", - "checksum": "9cee1c0461aaa74b8058bf8c18ff59b0e6f650a4ba475e57c625ae333d198345", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:18.177Z" - }, - { - "id": "DBD25450B8C73307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=macos)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core macos amd64 22.1.0 jdk11 ee", - "checksum": "002277df75c5aac2e35c839ac7a908bc3bd9cc70ace72c87b5394b00e355496a", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:17.249Z" - }, - { - "id": "DBD255350B352F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs linux aarch64 22.1.0 jdk17 ee", - "checksum": "30911a67944f6ee48f9155a31ba464a7d43aaab8fd04efc688a4a6b84c25adbc", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:16.829Z" - }, - { - "id": "DBD255350B2D2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "macos", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.1.0 on jdk11 darwin amd64", - "checksum": "7a6aaf36a99a355be3e28858ecb5209cc24edfdcb9051f8fc02a4e4d6d3561e4", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:16.081Z" - }, - { - "id": "DBD25450B8BA3307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image linux aarch64 22.1.0 jdk17 ee", - "checksum": "ec276e69c4d6ba2da77274fd4638a7d2773a450588eccbc4308c3116424eddaf", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:15.494Z" - }, - { - "id": "DBD255350B202F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain linux aarch64 22.1.0 jdk11 ee", - "checksum": "36877fa349d950612b79eed390251d43b7200e146506b94abaaec8082c661452", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:14.810Z" - }, - { - "id": "DBD255350B172F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=linux)(os_arch=aarch64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core linux aarch64 22.1.0 jdk17 ee", - "checksum": "b2db29548578f16f8f19f785938f25ae7f55e94e42a13ea675bf55bd6580aef7", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:14.154Z" - }, - { - "id": "DBD255350B092F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm linux aarch64 22.1.0 jdk11 ee", - "checksum": "3f362edfe6e1710209aef881776ae3aee84e16f32fb24178473c2fe9e1b10228", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:13.438Z" - }, - { - "id": "DBD25450B8B23307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.1.0 on jdk17 linux aarch64", - "checksum": "bf3c8d6ac4c14ce6160c9a9e794c60ed0729e8a15b3c0026197590d4ef4191e3", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:12.974Z" - }, - { - "id": "DBD255350AFA2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby linux aarch64 22.1.0 jdk11 ee", - "checksum": "20a5517d3f56af05e2103bb9b3cfaa7413661f25c37ed1bf423d864847775910", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:12.074Z" - }, - { - "id": "DBD2062279B23259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain linux amd64 22.1.0 jdk17 ee", - "checksum": "e988094026d5e2ce09d9048aa48d44227089af6e8748cd5fddf08a0643c7594d", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:11.761Z" - }, - { - "id": "DBD2062279A43259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle linux aarch64 22.1.0 jdk11 ee", - "checksum": "ff120156ffbf33b320344bd45c6f84a68bb19b880dc9c55036ef3611f86eae62", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:10.719Z" - }, - { - "id": "DBD255350AEB2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso-llvm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle LLVM Java libraries linux amd64 22.1.0 jdk17 ee", - "checksum": "4a165d5d219b496c30cee94ff4dd8061a819b0d6721f1ecb7681300f5e24b52a", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:10.433Z" - }, - { - "id": "DBD255350ADC2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs linux aarch64 22.1.0 jdk11 ee", - "checksum": "df87005d85671e64c91b60aa3e7217ab985174e8dc03d29026ee55d613c818b8", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:09.443Z" - }, - { - "id": "DBD2062279963259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm linux amd64 22.1.0 jdk17 ee", - "checksum": "61c0d5b4f882aaf0a6e25a33604fe126354f113000a0e52381ee231b4ba6a48f", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:09.075Z" - }, - { - "id": "DBD2062279893259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image linux aarch64 22.1.0 jdk11 ee", - "checksum": "083fe760cbf4b36ab80261baa3aa419817775c152eb5ada61fc37d27bd7e28f7", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:08.094Z" - }, - { - "id": "DBD255350ACD2F20E0538714000A44FF", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.python", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/python", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.Python linux amd64 22.1.0 jdk17 ee", - "checksum": "7c861c8565ccdcb2a5d663c19985c1939da29fec3a5397ed62dffbe86e982115", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:07.740Z" - }, - { - "id": "DBD25434029A402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=linux)(os_arch=aarch64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core linux aarch64 22.1.0 jdk11 ee", - "checksum": "44cb18a5a14b37ec7e71679d9d50ef82bc26dda0d3ab86affc461b8e6f3e59b5", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:06.559Z" - }, - { - "id": "DBD20622797A3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby linux amd64 22.1.0 jdk17 ee", - "checksum": "78597ee67f801067c5f90d21cbcf420a60281179d82bde51073bdc4279ffe65a", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:06.351Z" - }, - { - "id": "DBD254340292402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "aarch64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.1.0 on jdk11 linux aarch64", - "checksum": "fb8c78bf85595f4d7db7cdbe22faae01f719114f355b32370e4bbbbab332fb57", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:05.281Z" - }, - { - "id": "DBD254340283402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - }, - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - } - ], - "displayName": "Java on Truffle linux amd64 22.1.0 jdk17 ee", - "checksum": "c62f45a087d3430f0721da63a39bc02f205d19da35c1e149a06c2f90ac61cf15", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:05.006Z" - }, - { - "id": "DBD254340276402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.llvm-toolchain", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "LLVM.org toolchain linux amd64 22.1.0 jdk11 ee", - "checksum": "efd9a31738930834e18f5699d820302c5fae7ff43450a80a667167f275e80a65", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:04.067Z" - }, - { - "id": "DBD20622796B3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs linux amd64 22.1.0 jdk17 ee", - "checksum": "2af640c3e885fb850aabb62d51417b28e22adb3a35c982319f7eb9c89c5fcf4b", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:03.672Z" - }, - { - "id": "DBD20622795C3259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso-llvm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle LLVM Java libraries linux amd64 22.1.0 jdk11 ee", - "checksum": "54297c2b5a3d241b1a2c265fc59ebb227b1c94fc473359c254df1aae474b47b9", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:02.745Z" - }, - { - "id": "DBD254340269402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Native Image linux amd64 22.1.0 jdk17 ee", - "checksum": "459788ea23daa4222fb2cb5bf35daa1e1fc22ea3e59d4a29f81dca5df501e393", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:02.310Z" - }, - { - "id": "DBD25434025B402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.wasm", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/wasm", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "GraalWasm linux amd64 22.1.0 jdk11 ee", - "checksum": "980710df75bf8bb781be42f8798afb079950d06b84c4a085558eae319c2677e7", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:01.429Z" - }, - { - "id": "DBD254340252402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=linux)(os_arch=amd64)(java_version=17))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Core linux amd64 22.1.0 jdk17 ee", - "checksum": "8913f7de3183b77f42990c37fa76c5ff559bdaa5cdc3d3fdd09b6c28e45104c3", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:10:00.861Z" - }, - { - "id": "DBD254340243402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.python", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/python", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.Python linux amd64 22.1.0 jdk11 ee", - "checksum": "c38036fa962e5b0f363fd30be0cdc9c285da9a8f67ef0da06c146d57fe7654a4", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:09:59.945Z" - }, - { - "id": "DBD2062279543259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "java", - "value": "jdk17", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - } - ], - "displayName": "GraalVM Enterprise Edition 22.1.0 on jdk17 linux amd64", - "checksum": "39493412ff6c8936c9c40be8d421b8432972e12b1cddb6b88eed70e7425bb317", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:09:59.775Z" - }, - { - "id": "DBD2062279453259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.llvm-toolchain", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.ruby", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/ruby", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "experimental", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "experimental", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "TruffleRuby linux amd64 22.1.0 jdk11 ee", - "checksum": "d20f6bf47a01ba49e2ef1f8bcd42539dc4553c3df6f0ea2b30b34db7adcbd479", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:09:58.623Z" - }, - { - "id": "DBD2062279363259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.espresso", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.espresso", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/java", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Java on Truffle linux amd64 22.1.0 jdk11 ee", - "checksum": "ef3cb255578552661bcdb26423a86cfad2e592d7e2a31b5898905bcd5e5d16ef", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:09:57.145Z" - }, - { - "id": "DBD25450B8A33307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - }, - { - "key": "requireBundle", - "value": "org.graalvm.js", - "description": "Require bundle" - }, - { - "key": "symbolicName", - "value": "org.graalvm.nodejs", - "description": "Symbolic name" - }, - { - "key": "workingDirectories", - "value": "languages/nodejs", - "description": "Working Directory" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "stabilityLevel", - "value": "supported", - "description": "Stability Level" - }, - { - "key": "stability", - "value": "supported", - "description": "Stability" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "polyglot", - "value": "True", - "description": "Polyglot part" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - } - ], - "displayName": "Graal.nodejs linux amd64 22.1.0 jdk11 ee", - "checksum": "811dc67d63a2cc34aa0ea3cf0e352a3a3dcd9cda7d1352b9e3f070da5d5b0b8f", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:09:55.814Z" - }, - { - "id": "DBD2062279293259E0538714000A8AC8", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(graalvm_version=22.1.0)(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "supported", - "value": "False", - "description": "Status" - }, - { - "key": "polyglot", - "value": "False", - "description": "Polyglot part" - }, - { - "key": "isBase", - "value": "False", - "description": "Artifact type" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "stability", - "value": "earlyadopter", - "description": "Stability" - }, - { - "key": "stabilityLevel", - "value": "earlyadopter", - "description": "Stability Level" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "symbolicName", - "value": "org.graalvm.native-image", - "description": "Symbolic name" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - } - ], - "displayName": "Native Image linux amd64 22.1.0 jdk11 ee", - "checksum": "59e6b4d2667450a6d5e8ef1903c31e2edb8b03d4a3743c74280e38cd64670949", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:09:54.450Z" - }, - { - "id": "DBD25450B89A3307E0538714000AC8BE", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "requiredCapabilities", - "value": "org.graalvm; filter:=\"(&(os_name=linux)(os_arch=amd64)(java_version=11))\"", - "description": "Required Capabilities" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "symbolicName", - "value": "org.graalvm", - "description": "Symbolic name" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - } - ], - "displayName": "GraalVM Core linux amd64 22.1.0 jdk11 ee", - "checksum": "9d9d9e09de4b2e951cf13a2a4d562bcb6a907fc824db4fe596a68454284ad3ef", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:09:52.777Z" - }, - { - "id": "DBD25434023B402DE0538714000ACDDC", - "licenseId": "D53D4BDFD333BFD6E0538814000A1027", - "licenseName": "Oracle Technology Network License Agreement | GraalVM Enterprise Edition", - "productId": "DBD2062278CC3259E0538714000A8AC8", - "metadata": [ - { - "key": "supported", - "value": "True", - "description": "Status" - }, - { - "key": "isBase", - "value": "True", - "description": "Artifact type" - }, - { - "key": "arch", - "value": "amd64", - "description": "Architecture" - }, - { - "key": "os", - "value": "linux", - "description": "Operating System" - }, - { - "key": "edition", - "value": "ee", - "description": "Edition" - }, - { - "key": "java", - "value": "jdk11", - "description": "Java version" - }, - { - "key": "version", - "value": "22.1.0", - "description": "Release version" - } - ], - "displayName": "GraalVM Enterprise Edition 22.1.0 on jdk11 linux amd64", - "checksum": "ea861f16278e3f6c79a77469d14c844c200bbe19afba6b63ca43b0dc4abec803", - "status": "PUBLISHED", - "timeCreated": "2022-04-04T10:09:50.895Z" - } - ] -} \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/CatalogContentsTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/CatalogContentsTest.java deleted file mode 100644 index ad9b21b3131d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/CatalogContentsTest.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Properties; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.remote.RemotePropertiesStorage; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class CatalogContentsTest extends CommandTestBase { - - public CatalogContentsTest() { - } - - @Override - @Before - public void setUp() throws Exception { - super.setUp(); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "1.0.0.0"); - } - - RemotePropertiesStorage remstorage; - CatalogContents coll; - - private Version initVersion(String s) throws IOException { - Version v = Version.fromString(s); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, s); - Path catalogPath = dataFile("../repo/catalog.properties"); - Properties props = new Properties(); - try (InputStream is = Files.newInputStream(catalogPath)) { - props.load(is); - } - remstorage = new RemotePropertiesStorage(this, - getLocalRegistry(), - props, "linux_amd64", v, catalogPath.toUri().toURL()); - coll = new CatalogContents(this, remstorage, getLocalRegistry()); - return v; - } - - /** - * Checks that components for the version are provided. - */ - @Test - public void testComponentsForVersion19() throws Exception { - initVersion("1.0.0.0"); - - Collection ids = coll.getComponentIDs(); - assertTrue(ids.contains("org.graalvm.python")); - assertTrue(ids.contains("org.graalvm.ruby")); - assertTrue(ids.contains("org.graalvm.r")); - // plus graalvm - assertEquals(4, ids.size()); - - } - - @Test - public void testComponentsForVersion1901() throws Exception { - initVersion("1.0.1.0"); - Collection ids = coll.getComponentIDs(); - assertTrue(ids.contains("org.graalvm.python")); - assertTrue(ids.contains("org.graalvm.r")); - assertTrue(ids.contains("org.graalvm.ruby")); - // plus graalvm - assertEquals(4, ids.size()); - } - - @Test - public void testComponentsInLatestUpdate() throws Exception { - initVersion("1.0.1.0"); - - Version v; - v = coll.findComponent("org.graalvm.ruby").getVersion(); - assertEquals("1.0.1.1", v.toString()); - v = coll.findComponent("org.graalvm.python").getVersion(); - assertEquals("1.0.1.0", v.toString()); - v = coll.findComponent("org.graalvm.r").getVersion(); - assertEquals("1.0.1.1", v.toString()); - } - - @Test - public void testComponentsInPatchedGraal() throws Exception { - initVersion("1.0.1.1"); - - Version v; - - v = coll.findComponent("org.graalvm.ruby").getVersion(); - assertEquals("1.0.1.1", v.toString()); - v = coll.findComponent("org.graalvm.python").getVersion(); - assertEquals("1.0.1.0", v.toString()); - v = coll.findComponent("org.graalvm.r").getVersion(); - assertEquals("1.0.1.1", v.toString()); - } - - @Test - public void testComponentsForVersion191() throws Exception { - initVersion("1.1.0.0"); - - Collection ids = coll.getComponentIDs(); - assertTrue(ids.contains("org.graalvm.python")); - assertTrue(ids.contains("org.graalvm.r")); - // plus graalvm - assertEquals(3, ids.size()); - } - - /** - * Checks that the catalog will provide component versions that require to update the - * distribution for 1.0.1.0. Components in versions 1.1.x.x should be returned. - */ - @Test - public void testDistUpdateFor1901() throws Exception { - initVersion("1.0.1.0"); - coll.setAllowDistUpdate(true); - - Version v; - v = coll.findComponent("org.graalvm.ruby").getVersion(); - assertEquals("1.0.1.1", v.toString()); - v = coll.findComponent("org.graalvm.python").getVersion(); - assertEquals("1.1.0.0", v.toString()); - v = coll.findComponent("org.graalvm.r").getVersion(); - assertEquals("1.1.0.1", v.toString()); - } - - /** - * Checks that a specific version is provided. - */ - @Test - public void testSpecificVersionNoDistUpdate() throws Exception { - initVersion("1.0.1.0"); - - Version v; - Version.Match vm = Version.fromString("1.1.0.0").match(Version.Match.Type.EXACT); - ComponentInfo ci = coll.findComponent("ruby", vm); - assertNull(ci); - - vm = Version.fromString("1.0.1.0").match(Version.Match.Type.GREATER); - ci = coll.findComponent("ruby", vm); - v = ci.getVersion(); - assertEquals("1.0.1.1", v.toString()); - - vm = Version.fromString("1.0.1.0").match(Version.Match.Type.GREATER); - v = coll.findComponent("python", vm).getVersion(); - assertEquals("1.1.0.0", v.toString()); - - vm = Version.fromString("1.0.0.0").match(Version.Match.Type.EXACT); - ci = coll.findComponent("python", vm); - assertNull(ci); - - v = coll.findComponent("org.graalvm.r").getVersion(); - assertEquals("1.0.1.1", v.toString()); - - vm = Version.fromString("1.0.1.0").match(Version.Match.Type.MOSTRECENT); - v = coll.findComponent("r", vm).getVersion(); - assertEquals("1.0.1.1", v.toString()); - } - - /** - * Checks that a specific version is provided. - */ - @Test - public void testSpecificVersionDistUpdate() throws Exception { - initVersion("1.0.1.0"); - coll.setAllowDistUpdate(true); - - Version v; - Version.Match vm = Version.fromString("1.1.0.0").match(Version.Match.Type.EXACT); - ComponentInfo ci = coll.findComponent("ruby", vm); - assertNull(ci); - - vm = Version.fromString("1.0.1.0").match(Version.Match.Type.GREATER); - ci = coll.findComponent("ruby", vm); - v = ci.getVersion(); - assertEquals("1.0.1.1", v.toString()); - - vm = Version.fromString("1.0.1.0").match(Version.Match.Type.GREATER); - v = coll.findComponent("python", vm).getVersion(); - assertEquals("1.1.0.0", v.toString()); - - vm = Version.fromString("1.0.0.0").match(Version.Match.Type.EXACT); - ci = coll.findComponent("python", vm); - assertNull(ci); - - v = coll.findComponent("org.graalvm.r").getVersion(); - assertEquals("1.1.0.1", v.toString()); - - vm = Version.fromString("1.0.1.0").match(Version.Match.Type.MOSTRECENT); - v = coll.findComponent("r", vm).getVersion(); - assertEquals("1.1.0.1", v.toString()); - } - - /** - * - */ - @Test - public void testFindDependentComponents() { - - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/ComponentRegistryTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/ComponentRegistryTest.java deleted file mode 100644 index 50fa68024f4f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/ComponentRegistryTest.java +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.io.BufferedReader; -import java.io.IOException; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.jar.JarFile; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.commands.MockStorage; -import org.graalvm.component.installer.jar.JarMetaLoader; -import org.graalvm.component.installer.persist.ComponentPackageLoader; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Assert; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.rules.TestName; - -public class ComponentRegistryTest extends TestBase { - private BufferedReader releaseFile; - private MockStorage mockStorage = new MockStorage(); - - private ComponentInfo rubyInfo; - private ComponentInfo fakeInfo; - private ComponentInfo tmp1; - private ComponentInfo tmp2; - - @Rule public ExpectedException exception = ExpectedException.none(); - @Rule public TestName name = new TestName(); - - private ComponentRegistry registry; - - public ComponentRegistryTest() { - } - - @BeforeClass - public static void setUpClass() { - } - - @AfterClass - public static void tearDownClass() { - } - - @Before - public void setUp() throws Exception { - registry = new ComponentRegistry(this, mockStorage); - - try (JarFile jf = new JarFile(dataFile("truffleruby2.jar").toFile())) { - ComponentPackageLoader ldr = new JarMetaLoader(jf, this); - - rubyInfo = ldr.createComponentInfo(); - ldr.loadPaths(); - ldr.loadSymlinks(); - } - - fakeInfo = new ComponentInfo("org.graalvm.fake", "Fake component", "0.32"); - fakeInfo.addPaths(Arrays.asList( - "jre/bin/ruby", - "jre/languages/fake/nothing")); - mockStorage.installed.add(fakeInfo); - } - - private void registerAdditionalComponents() { - ComponentInfo tmp = new ComponentInfo("org.graalvm.foobar", "Test component 1", "0.32"); - mockStorage.installed.add(tmp); - - tmp = new ComponentInfo("org.graalvm.clash", "Test component 2", "0.32"); - mockStorage.installed.add(tmp); - tmp1 = tmp; - tmp = new ComponentInfo("org.github.clash", "Test component 3", "0.32"); - mockStorage.installed.add(tmp); - tmp2 = tmp; - - tmp = new ComponentInfo("org.graalvm.Uppercase", "Test component 4", "0.32"); - mockStorage.installed.add(tmp); - } - - @After - public void tearDown() throws Exception { - if (releaseFile != null) { - releaseFile.close(); - } - } - - /** - * Test of findComponent method, of class ComponentRegistry. - */ - @Test - public void testFindComponent() throws Exception { - assertSame(fakeInfo, registry.findComponent("org.graalvm.fake")); - assertNull(registry.findComponent("org.graalvm.ruby")); - - registry.addComponent(rubyInfo); - assertNotNull(registry.findComponent("org.graalvm.ruby")); - - registry.removeComponent(rubyInfo); - assertNull(registry.findComponent("org.graalvm.ruby")); - } - - @Test - public void testFindAbbreviatedComponent() throws Exception { - registerAdditionalComponents(); - - assertSame(fakeInfo, registry.findComponent("fake")); - assertNull(registry.findComponent("org.graalvm.ruby")); - assertNull(registry.findComponent("ruby")); - - assertNotNull(registry.findComponent("foobar")); - - registry.addComponent(rubyInfo); - assertNotNull(registry.findComponent("ruby")); - - registry.removeComponent(rubyInfo); - assertNull(registry.findComponent("ruby")); - } - - @Test - public void testFindAmbiguousComponent() throws Exception { - registerAdditionalComponents(); - exception.expect(FailedOperationException.class); - exception.expectMessage("COMPONENT_AmbiguousIdFound"); - registry.findComponent("clash"); - } - - @Test - public void testFindAmbiguousComponentAfterRemove() throws Exception { - registerAdditionalComponents(); - try { - registry.findComponent("clash"); - Assert.fail("Expected failure clash"); - } catch (FailedOperationException ex) { - // expected - } - registry.removeComponent(tmp2); - assertSame(tmp1, registry.findComponent("clash")); - - } - - @Test - public void testFindUnknownComponent() throws Exception { - assertSame(fakeInfo, registry.findComponent("org.graalvm.fake")); - assertNull(registry.findComponent("org.graalvm.ruby")); - } - - public void testLoadUnknownComponent() throws Exception { - - } - - /** - * Test of getComponentIDs method, of class ComponentRegistry. - */ - @Test - public void testGetComponentIDs() throws IOException { - Collection ids = registry.getComponentIDs(); - assertEquals(1, ids.size()); - assertEquals("org.graalvm.fake", ids.iterator().next()); - - registry.addComponent(rubyInfo); - - assertEquals( - new HashSet<>(Arrays.asList( - "org.graalvm.fake", - "org.graalvm.ruby")), - new HashSet<>(registry.getComponentIDs())); - - registry.removeComponent(rubyInfo); - assertEquals( - new HashSet<>(Arrays.asList( - "org.graalvm.fake")), - new HashSet<>(registry.getComponentIDs())); - } - - /** - * Test of removeComponent method, of class ComponentRegistry. - */ - @Test - public void testRemoveComponent() throws Exception { - mockStorage.installed.add(rubyInfo); - mockStorage.replacedFiles.put("jre/bin/ruby", - Arrays.asList( - "org.graalvm.fake", - "org.graalvm.ruby")); - - registry.removeComponent(rubyInfo); - Assert.assertNotEquals(mockStorage.updatedReplacedFiles, mockStorage.replacedFiles); - assertNull(mockStorage.updatedReplacedFiles.get("jre/bin/ruby")); - } - - /** - * Test of addComponent method, of class ComponentRegistry. - */ - @Test - public void testAddComponent() throws Exception { - registry.addComponent(rubyInfo); - - // check replaced files: - assertNotNull(mockStorage.updatedReplacedFiles.get("jre/bin/ruby")); - assertEquals(new HashSet<>(Arrays.asList( - "org.graalvm.fake", - "org.graalvm.ruby")), - new HashSet<>(mockStorage.updatedReplacedFiles.get("jre/bin/ruby"))); - } - - /** - * Test of getPreservedFiles method, of class ComponentRegistry. - */ - @Test - public void testGetPreservedFiles() { - mockStorage.installed.add(rubyInfo); - - List ll = registry.getPreservedFiles(rubyInfo); - assertEquals(Arrays.asList("jre/bin/ruby", CommonConstants.PATH_COMPONENT_STORAGE), ll); - } - - /** - * Test of getOwners method, of class ComponentRegistry. - */ - @Test - public void testGetOwners() { - rubyInfo.addPaths(Collections.singletonList("bin/ruby")); - mockStorage.installed.add(rubyInfo); - List l = registry.getOwners("jre/bin/ruby"); - assertEquals(new HashSet<>(Arrays.asList( - "org.graalvm.fake", - "org.graalvm.ruby")), new HashSet<>(l)); - l = registry.getOwners("bin/ruby"); - assertEquals(Arrays.asList("org.graalvm.ruby"), l); - } - - /** - * Test of isReplacedFilesChanged method, of class ComponentRegistry. - */ - @Test - public void testIsReplacedFilesChanged() throws IOException { - registry.addComponent(rubyInfo); - assertTrue(registry.isReplacedFilesChanged()); - - ComponentInfo testInfo = new ComponentInfo("org.graalvm.test", "Test component", "1.0"); - testInfo.addPaths(Arrays.asList( - "jre/bin/ruby2", - "jre/languages/fake/nothing2")); - - // add disjunct component - registry.addComponent(testInfo); - assertFalse(registry.isReplacedFilesChanged()); - } - - @Test - public void testFindUppercaseIDComponent() throws Exception { - registerAdditionalComponents(); - ComponentInfo ci = registry.findComponent("org.graalvm.Uppercase"); - assertNotNull(ci); - } - - @Test - public void testFindUppercaseIDComponentWithLowercaseExor() throws Exception { - registerAdditionalComponents(); - ComponentInfo ci = registry.findComponent("org.graalvm.uppercase"); - assertNotNull(ci); - } - - ComponentInfo ruby; - ComponentInfo fastr; - ComponentInfo llvm; - ComponentInfo image; - - private void setupComponentsWithDependencies() { - llvm = new ComponentInfo("org.graalvm.llvm-toolchain", "LLVM", Version.fromString("19.3")); - image = new ComponentInfo("org.graalvm.native-image", "Native Image", Version.fromString("19.3")); - image.setDependencies(Collections.singleton(llvm.getId())); - - fastr = new ComponentInfo("org.graalvm.r", "R", Version.fromString("19.3")); - fastr.setDependencies(Collections.singleton(llvm.getId())); - ruby = new ComponentInfo("org.graalvm.ruby", "Ruby", Version.fromString("19.3")); - ruby.setDependencies(new HashSet<>(Arrays.asList(image.getId()))); - - mockStorage.installed.add(llvm); - mockStorage.installed.add(image); - mockStorage.installed.add(fastr); - mockStorage.installed.add(ruby); - } - - @Test - public void testDependentComponents() throws Exception { - setupComponentsWithDependencies(); - - Set comps = registry.findDependentComponents(image, false); - assertEquals(1, comps.size()); - assertSame(ruby, comps.iterator().next()); - - comps = registry.findDependentComponents(llvm, false); - assertEquals(2, comps.size()); - assertTrue(comps.contains(fastr)); - assertTrue(comps.contains(image)); - } - - @Test - public void testDependentComponentsRecursive() throws Exception { - setupComponentsWithDependencies(); - - Set comps = registry.findDependentComponents(image, true); - assertEquals(1, comps.size()); - assertSame(ruby, comps.iterator().next()); - - comps = registry.findDependentComponents(llvm, true); - assertEquals(3, comps.size()); - assertTrue(comps.contains(fastr)); - assertTrue(comps.contains(ruby)); - assertTrue(comps.contains(image)); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/MergedCatalogContentsTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/MergedCatalogContentsTest.java deleted file mode 100644 index 939643143f13..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/MergedCatalogContentsTest.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.HashSet; -import java.util.Properties; -import java.util.Set; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.remote.RemotePropertiesStorage; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Test; - -/** - * Tests CatalogContents which is essentially a combination of several catalogs + local registry - * contents. - * - * @author sdedic - */ -public class MergedCatalogContentsTest extends CommandTestBase { - - public MergedCatalogContentsTest() { - } - - @Override - @Before - public void setUp() throws Exception { - super.setUp(); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "1.0.0.0"); - } - - RemotePropertiesStorage remstorage; - CatalogContents coll; - - private Version initVersion(String s) throws IOException { - Version v = Version.fromString(s); - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, s); - Path catalogPath = dataFile("catalog-deps.properties"); - Properties props = new Properties(); - try (InputStream is = Files.newInputStream(catalogPath)) { - props.load(is); - } - remstorage = new RemotePropertiesStorage(this, - getLocalRegistry(), - props, "linux_amd64", v, catalogPath.toUri().toURL()); - coll = new CatalogContents(this, remstorage, getLocalRegistry()); - return v; - } - - /** - * Finds 1st level dependencies of components. - */ - @Test - public void testFindDependenciesOneLevel() throws Exception { - initVersion("19.3"); - ComponentInfo ci = coll.findComponent("org.graalvm.r", null); - assertNotNull(ci); - Set deps = new HashSet<>(); - Set errors = coll.findDependencies(ci, false, null, deps); - assertNull(errors); - assertEquals(1, deps.size()); - assertEquals("org.graalvm.llvm-toolchain", deps.iterator().next().getId()); - - ci = coll.findComponent("org.graalvm.ruby", null); - assertNotNull(ci); - deps = new HashSet<>(); - errors = coll.findDependencies(ci, false, null, deps); - assertNull(errors); - assertEquals(1, deps.size()); - assertEquals("org.graalvm.native-image", deps.iterator().next().getId()); - } - - /** - * Finds 1st level dependencies of components, but just those installed. - */ - @Test - public void testFindDependenciesOneLevelInstalled() throws Exception { - initVersion("19.3"); - ComponentInfo ci = coll.findComponent("org.graalvm.r", null); - ComponentInfo ll = coll.findComponent("org.graalvm.llvm-toolchain", null); - assertNotNull(ci); - assertNotNull(ll); - - // fake the component is local - ll.setInfoPath(""); - storage.installed.add(ll); - - Set deps = new HashSet<>(); - Set errors = coll.findDependencies(ci, false, Boolean.TRUE, deps); - assertNull(errors); - assertEquals(1, deps.size()); - assertEquals("org.graalvm.llvm-toolchain", deps.iterator().next().getId()); - - // native-image is not local, will be reported as broken: - ci = coll.findComponent("org.graalvm.ruby", null); - assertNotNull(ci); - deps = new HashSet<>(); - errors = coll.findDependencies(ci, false, Boolean.TRUE, deps); - assertNotNull(errors); - assertTrue(deps.isEmpty()); - assertEquals(1, errors.size()); - assertEquals("org.graalvm.native-image", errors.iterator().next()); - } - - /** - * Finds components recursively. - */ - @Test - public void testFindDependenciesRecursive() throws Exception { - initVersion("19.3"); - ComponentInfo ci = coll.findComponent("org.graalvm.r", null); - assertNotNull(ci); - Set deps = new HashSet<>(); - Set errors = coll.findDependencies(ci, true, null, deps); - assertNull(errors); - assertEquals(1, deps.size()); - assertEquals("org.graalvm.llvm-toolchain", deps.iterator().next().getId()); - - ci = coll.findComponent("org.graalvm.ruby", null); - assertNotNull(ci); - deps = new HashSet<>(); - errors = coll.findDependencies(ci, true, null, deps); - assertNull(errors); - assertEquals(2, deps.size()); - - ComponentInfo ni = coll.findComponent("org.graalvm.native-image", null); - ComponentInfo ll = coll.findComponent("org.graalvm.llvm-toolchain", null); - assertTrue(deps.contains(ni)); - assertTrue(deps.contains(ll)); - } - - /** - * Checks that installed components from the closure are reported and those not installed are - * reported as missing in the return val. - */ - @Test - public void testFindDependenciesRecursiveInstalled() throws Exception { - initVersion("19.3"); - ComponentInfo ci = coll.findComponent("org.graalvm.ruby", null); - ComponentInfo ni = coll.findComponent("org.graalvm.native-image", null); - assertNotNull(ci); - assertNotNull(ni); - ni.setInfoPath(""); - storage.installed.add(ni); - - Set deps = new HashSet<>(); - Set errors = coll.findDependencies(ci, true, Boolean.TRUE, deps); - assertNotNull(errors); - assertEquals(1, deps.size()); - assertEquals(1, errors.size()); - assertEquals("org.graalvm.native-image", deps.iterator().next().getId()); - assertEquals("org.graalvm.llvm-toolchain", errors.iterator().next()); - } - - /** - * Checks that only not installed dependencies are reported. One is installed and will not be - * returned (but is present). The other is not yet installed, will be reported. - */ - @Test - public void testFindDependenciesOnlyMissing() throws Exception { - initVersion("19.3"); - ComponentInfo ci = coll.findComponent("org.graalvm.ruby", null); - ComponentInfo ni = coll.findComponent("org.graalvm.native-image", null); - assertNotNull(ci); - assertNotNull(ni); - ni.setInfoPath(""); - storage.installed.add(ni); - - Set deps = new HashSet<>(); - Set errors = coll.findDependencies(ci, true, Boolean.FALSE, deps); - assertNull(errors); - assertEquals(1, deps.size()); - assertEquals("org.graalvm.llvm-toolchain", deps.iterator().next().getId()); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/VerifierTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/VerifierTest.java deleted file mode 100644 index eb35bdccdbdc..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/VerifierTest.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.util.jar.JarFile; -import static org.graalvm.component.installer.CommonConstants.CAP_OS_NAME; -import org.graalvm.component.installer.DependencyException; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.commands.MockStorage; -import org.graalvm.component.installer.jar.JarMetaLoader; -import org.graalvm.component.installer.persist.ComponentPackageLoader; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -/** - * - * @author sdedic - */ -public class VerifierTest extends TestBase { - private MockStorage mockStorage = new MockStorage(); - private ComponentRegistry registry; - private ComponentInfo rubyInfo; - - @Rule public ExpectedException exception = ExpectedException.none(); - - @Before - public void setUp() throws Exception { - registry = new ComponentRegistry(this, mockStorage); - } - - @Test - public void testGraalCapabilitiesCaseInsensitive() throws Exception { - try (JarFile jf = new JarFile(dataFile("truffleruby2.jar").toFile())) { - ComponentPackageLoader ldr = new JarMetaLoader(jf, this); - - rubyInfo = ldr.createComponentInfo(); - ldr.loadPaths(); - ldr.loadSymlinks(); - } - mockStorage.graalInfo.put(CAP_OS_NAME, "LiNuX"); - - Verifier vfy = new Verifier(this, registry, registry); - vfy.validateRequirements(rubyInfo); - } - - @Test - public void testGraalCapabilitiesMismatch() throws Exception { - try (JarFile jf = new JarFile(dataFile("truffleruby2.jar").toFile())) { - ComponentPackageLoader ldr = new JarMetaLoader(jf, this); - - rubyInfo = ldr.createComponentInfo(); - ldr.loadPaths(); - ldr.loadSymlinks(); - } - mockStorage.graalInfo.put(CAP_OS_NAME, "LiNuy"); - - Verifier vfy = new Verifier(this, registry, registry); - exception.expect(DependencyException.Mismatch.class); - exception.expectMessage("VERIFY_Dependency_Failed"); - vfy.validateRequirements(rubyInfo); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/catalog-deps.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/catalog-deps.properties deleted file mode 100644 index be482adf3d07..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/catalog-deps.properties +++ /dev/null @@ -1,41 +0,0 @@ -org.graalvm.19.3_linux_amd64=GraalVM 19.3 linux/amd64 - -Component.linux_amd64/19.3/org.graalvm.llvm_toolchain=llvm/19.3 -Component.linux_amd64/19.3/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/19.3/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3/org.graalvm.llvm_toolchain-Bundle-Name=LLVM Toolchain -Component.linux_amd64/19.3/org.graalvm.llvm_toolchain-Bundle-Version=19.3 - -Component.linux_amd64/19.3/org.graalvm.native_image=image/19.3 -Component.linux_amd64/19.3/org.graalvm.native_image-Bundle-Symbolic-Name=org.graalvm.native-image -Component.linux_amd64/19.3/org.graalvm.native_image-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3/org.graalvm.native_image-Bundle-Name=Native Image -Component.linux_amd64/19.3/org.graalvm.native_image-Bundle-Version=19.3 -Component.linux_amd64/19.3/org.graalvm.native_image-Require-Bundle=org.graalvm.llvm-toolchain - -Component.linux_amd64/19.3/org.graalvm.broken=broken/19.3 -Component.linux_amd64/19.3/org.graalvm.broken-Bundle-Symbolic-Name=org.graalvm.broken -Component.linux_amd64/19.3/org.graalvm.broken-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3/org.graalvm.broken-Bundle-Name=Broken Component -Component.linux_amd64/19.3/org.graalvm.broken-Bundle-Version=19.3 -Component.linux_amd64/19.3/org.graalvm.broken-Require-Bundle=org.graalvm.missing1 - -Component.linux_amd64/19.3/org.graalvm.r=r/19.3 -Component.linux_amd64/19.3/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/19.3/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/19.3/org.graalvm.r-Bundle-Version=19.3 -Component.linux_amd64/19.3/org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain - -Component.linux_amd64/19.3/org.graalvm.ruby=ruby/19.3 -Component.linux_amd64/19.3/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/19.3/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/19.3/org.graalvm.ruby-Bundle-Version=19.3 -Component.linux_amd64/19.3/org.graalvm.ruby-Require-Bundle=org.graalvm.native-image - -Component.linux_amd64/19.3/org.graalvm=core/graalvm-19.3.jar -Component.linux_amd64/19.3/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/19.3/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/19.3/org.graalvm-Bundle-Version=19.3 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/truffleruby2.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/truffleruby2.jar deleted file mode 100644 index 254870113986..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/model/truffleruby2.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/Bundle.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/Bundle.properties deleted file mode 100644 index 2ae778bfb9d8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/Bundle.properties +++ /dev/null @@ -1,30 +0,0 @@ -# {0} - component ID -# {1} - component version -LICENSE_Path_translation=LICENSE-{0}-{1} -ERROR_HeaderMissing=ERROR_HeaderMissing -ERROR_MissingSymbolicName=ERROR_MissingSymbolicName -ERROR_InvalidSymbolicName=ERROR_InvalidSymbolicName -ERROR_ParametersUnsupported=ERROR_ParametersUnsupported -ERROR_InvalidVersion=ERROR_InvalidVersion -ERROR_InvalidCapabilityName=ERROR_InvalidCapabilityName -ERROR_MissingCapabilityName=ERROR_MissingCapabilityName -# {0} - Directive or parameter name -ERROR_MissingArgument=ERROR_MissingArgument -# {0} - parameter name -ERROR_InvalidParameterSyntax=ERROR_InvalidParameterSyntax -ERROR_InvalidQuotedString=ERROR_InvalidQuotedString -# {0} - parameter name -ERROR_MissingArgument=ERROR_MissingArgument -ERROR_InvalidVersion=ERROR_InvalidVersion -ERROR_InvalidParameterName=ERROR_InvalidParameterName -ERROR_UnsupportedParameters=ERROR_UnsupportedParameters -ERROR_UnsupportedDirectives=ERROR_UnsupportedDirectives -ERROR_MissingVersionFilter=ERROR_MissingVersionFilter -ERROR_InvalidFilterSpecification=ERROR_InvalidFilterSpecification -ERROR_UnknownCapability=ERROR_UnknownCapability -ERROR_UnsupportedFilterOperation=ERROR_UnsupportedFilterOperation -ERROR_DuplicateFilterAttribute=ERROR_DuplicateFilterAttribute - -ERROR_PermissionFormat=ERROR_PermissionFormat -ERROR_BrokenSymlink=ERROR_BrokenSymlink -ERROR_CircularSymlink=ERROR_CircularSymlink diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/ComponentPackageLoaderTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/ComponentPackageLoaderTest.java deleted file mode 100644 index ddac9c4d27c6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/ComponentPackageLoaderTest.java +++ /dev/null @@ -1,390 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.BufferedReader; -import org.graalvm.component.installer.MetadataException; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.ResourceBundle; -import java.util.Set; -import java.util.jar.JarFile; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.jar.JarMetaLoader; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.DistributionType; -import org.graalvm.component.installer.model.StabilityLevel; -import org.junit.After; -import org.junit.Assert; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.rules.ExternalResource; -import org.junit.rules.TestName; - -public class ComponentPackageLoaderTest extends TestBase { - @Rule public TestName name = new TestName(); - @Rule public ExpectedException exception = ExpectedException.none(); - private Properties data = new Properties(); - private JarFile jarData; - - public ComponentPackageLoaderTest() { - } - - private JarFile jf; - - @Rule public ExternalResource jarFileResource = new ExternalResource() { - @Override - protected void after() { - if (jf != null) { - try { - jf.close(); - } catch (IOException ex) { - // ignore - } - } - super.after(); - } - }; - - @Before - public void setUp() throws Exception { - defaultBundle = ResourceBundle.getBundle("org.graalvm.component.installer.persist.Bundle"); // NOI18N - String s = name.getMethodName(); - if (s.startsWith("test") && s.length() > 4) { - s = Character.toLowerCase(s.charAt(4)) + s.substring(5); - } - - Path dp = dataFile("data/" + s + ".jar"); - if (Files.exists(dp)) { - this.jarData = new JarFile(dp.toFile()); - } - try (InputStream istm = getClass().getResourceAsStream("data/" + s + ".properties")) { - if (istm != null) { - data.load(istm); - } - } - } - - @After - public void tearDown() throws Exception { - if (jarData != null) { - jarData.close(); - } - } - - ComponentInfo info() throws IOException { - if (jarData == null) { - return new ComponentPackageLoader(data::getProperty, this).createComponentInfo(); - } else { - return new JarMetaLoader(jarData, this).createComponentInfo(); - } - } - - /** - * Checks that the parser rejects components, if they have some keys required. - * - * @throws Exception - */ - @Test - @SuppressWarnings({"rawtypes", "unchecked"}) - public void testRequiredKeys() throws Exception { - // first try to parse OK to capture possibel bugs - info(); - - Properties save = new Properties(); - save.putAll(this.data); - List sorted = new ArrayList<>((Set) save.keySet()); - Collections.sort(sorted); - for (String s : save.stringPropertyNames()) { - data = new Properties(); - data.putAll(save); - data.remove(s); - - try { - info(); - Assert.fail("Pasrer must reject component without key " + s); - } catch (MetadataException ex) { - // OK - } - } - } - - @Test - public void testWorkingDirectories() throws Exception { - // first try to parse OK to capture possibel bugs - info = info(); - - assertTrue(info.getWorkingDirectories().contains("jre/languages/test/scrap")); - assertTrue(info.getWorkingDirectories().contains("jre/lib/test/scrapdir")); - } - - @Test - public void testCollectErrors() throws Exception { - File f = dataFile("broken1.zip").toFile(); - jf = new JarFile(f); - loader = new JarMetaLoader(jf, this).infoOnly(true); - info = loader.createComponentInfo(); - - List errs = new ArrayList<>(); - loader.getErrors().forEach((e) -> errs.add(((MetadataException) e).getOffendingHeader())); - Collections.sort(errs); - assertEquals("org.graalvm.ruby", info.getId()); - assertEquals(Arrays.asList( - BundleConstants.BUNDLE_NAME, - BundleConstants.BUNDLE_REQUIRED, - BundleConstants.BUNDLE_VERSION), errs); - } - - private ComponentPackageLoader loader; - private ComponentInfo info; - - private void setupLoader() throws IOException { - File f = dataFile("data/truffleruby2.jar").toFile(); - jf = new JarFile(f); - loader = new JarMetaLoader(jf, this); - info = loader.createComponentInfo(); - } - - @Test - public void testLoadPaths() throws Exception { - setupLoader(); - assertTrue(info.getPaths().isEmpty()); - loader.loadPaths(); - assertFalse(info.getPaths().isEmpty()); - assertTrue(info.getPaths().contains("jre/bin/ruby")); - } - - @Test - public void testLoadSymlinks() throws Exception { - setupLoader(); - loader.loadPaths(); - Map slinks = loader.loadSymlinks(); - assertNotNull(slinks); - assertNotNull(slinks.get("bin/ruby")); - - // check that empty symlink props parse to nothing: - loader.parseSymlinks(new Properties()); - } - - @Test - public void testComponetInfoFromJar() throws Exception { - setupLoader(); - assertNotNull(info.getId()); - assertEquals("1.0", info.getVersionString()); - - Map caps = info.getRequiredGraalValues(); - assertNotNull(caps); - assertNotNull(caps.get(CommonConstants.CAP_GRAALVM_VERSION)); - } - - @Test - public void testParseChainedSymlinks() throws Exception { - setupLoader(); - loader.loadPaths(); - - Properties links = new Properties(); - try (InputStream istm = new FileInputStream(dataFile("chainedSymlinks.properties").toFile())) { - links.load(istm); - } - - loader.parseSymlinks(links); - } - - @Test - public void testParseCircularSymlink() throws Exception { - setupLoader(); - loader.loadPaths(); - - Properties links = new Properties(); - try (InputStream istm = new FileInputStream(dataFile("circularSymlinks.properties").toFile())) { - links.load(istm); - } - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_CircularSymlink"); - loader.parseSymlinks(links); - } - - @Test - public void testBrokenSymlink() throws Exception { - setupLoader(); - loader.loadPaths(); - - Properties links = new Properties(); - try (InputStream istm = new FileInputStream(dataFile("brokenSymlinks.properties").toFile())) { - links.load(istm); - } - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_BrokenSymlink"); - loader.parseSymlinks(links); - } - - @Test - public void testBrokenChainedSymlink() throws Exception { - setupLoader(); - loader.loadPaths(); - - Properties links = new Properties(); - try (InputStream istm = new FileInputStream(dataFile("brokenChainedSymlinks.properties").toFile())) { - links.load(istm); - } - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_BrokenSymlink"); - loader.parseSymlinks(links); - } - - @Test - public void testLoadInvalidPermssions() throws Exception { - setupLoader(); - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_PermissionFormat"); - try (InputStream istm = Files.newInputStream(dataFile("brokenPermissions.properties")); - BufferedReader br = new BufferedReader(new InputStreamReader(istm))) { - loader.parsePermissions(br); - } - } - - @Test - public void testLoadPermssions() throws Exception { - setupLoader(); - Map permissions = loader.loadPermissions(); - - String v = permissions.get("./jre/languages/ruby/bin/gem"); - assertEquals("", v); - v = permissions.get("./jre/bin/ruby"); - assertEquals("r-xr-xr-x", v); - } - - @Test - public void testPostinstMessage() throws Exception { - // first try to parse OK to capture possibel bugs - info = info(); - String[] slashes = info.getPostinstMessage().split("\\\\"); - assertEquals(3, slashes.length); - String[] lines = info.getPostinstMessage().split("\n"); - assertEquals(4, lines.length); - } - - @Test - public void testFastr() throws Exception { - info = info(); - assertEquals(1, info.getDependencies().size()); - assertEquals("org.graalvm.llvm-toolchain", info.getDependencies().iterator().next()); - } - - @Test - public void testDistributionTypeMissing() throws Exception { - info = info(); - assertEquals(DistributionType.OPTIONAL, info.getDistributionType()); - } - - @Test - public void testDistributionTypeBundled() throws Exception { - info = info(); - assertEquals(DistributionType.BUNDLED, info.getDistributionType()); - } - - @Test - public void testDistributionTypeInvalid() throws Exception { - info = info(); - assertEquals(DistributionType.OPTIONAL, info.getDistributionType()); - } - - /** - * Checks the old attribute is still read/honoured. - * - * @throws Exception - */ - @Test - public void testStabilityOld() throws Exception { - info = info(); - assertEquals(StabilityLevel.Experimental, info.getStability()); - } - - /** - * Checks the new attribute is read. - */ - @Test - public void testStabilityNew() throws Exception { - info = info(); - assertEquals(StabilityLevel.Experimental_Earlyadopter, info.getStability()); - } - - /** - * Checks the if new AND old attributes are present, the new one gets precedence. - */ - @Test - public void testStabilityPrecedence() throws Exception { - info = info(); - assertEquals(StabilityLevel.Experimental, info.getStability()); - } - - @Test - public void testStabilityLevelNone() throws Exception { - info = info(); - assertEquals(StabilityLevel.Undefined, info.getStability()); - assertNotNull(info.getStability().displayName(this)); - } - - @Test - public void testStabilityLevelUnknown() throws Exception { - info = info(); - assertEquals(StabilityLevel.Undefined, info.getStability()); - assertNotNull(info.getStability().displayName(this)); - } - - @Test - public void testStabilityLevelExperimental() throws Exception { - info = info(); - assertEquals(StabilityLevel.Experimental, info.getStability()); - assertNotNull(info.getStability().displayName(this)); - } - - @Test - public void testStabilityLevelExperimental2() throws Exception { - info = info(); - assertEquals(StabilityLevel.Experimental_Earlyadopter, info.getStability()); - assertNotNull(info.getStability().displayName(this)); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryCatalogProviderTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryCatalogProviderTest.java deleted file mode 100644 index 41910f4f28d2..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryCatalogProviderTest.java +++ /dev/null @@ -1,244 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; -import java.util.Set; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.test.Handler; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class DirectoryCatalogProviderTest extends CommandTestBase { - @Rule public ProxyResource proxyResource = new ProxyResource(); - - @Test - public void testLoadFromEmptyDirectory() throws Exception { - Path nf = testFolder.newFolder().toPath(); - DirectoryCatalogProvider prov = new DirectoryCatalogProvider(nf, this); - - assertTrue(prov.listComponentIDs().isEmpty()); - } - - @Test - public void testLoadFromNonDirectory() throws Exception { - Path nf = testFolder.newFile().toPath(); - DirectoryCatalogProvider prov = new DirectoryCatalogProvider(nf, this); - - assertTrue(prov.listComponentIDs().isEmpty()); - } - - @Test - public void testLoadComponentsJars() throws Exception { - Path ruby033 = dataFile("data/truffleruby2.jar"); - Path ruby10 = dataFile("../remote/data/truffleruby2.jar"); - Path llvm = dataFile("data/llvm-toolchain.jar"); - - Path nf = testFolder.newFolder().toPath(); - Files.copy(ruby033, nf.resolve(ruby033.getFileName())); - Files.copy(ruby10, nf.resolve("truffleruby10.jar")); - Files.copy(llvm, nf.resolve(llvm.getFileName())); - - DirectoryCatalogProvider prov = new DirectoryCatalogProvider(nf, this); - Set ids = prov.listComponentIDs(); - - assertEquals(2, ids.size()); - assertTrue(ids.contains("org.graalvm.ruby")); - assertTrue(ids.contains("org.graalvm.llvm-toolchain")); - } - - static class E { - Throwable ex; - String file; - String msg; - } - - class FB extends FeedbackAdapter { - List errs = new ArrayList<>(); - - @Override - public void error(String key, Throwable t, Object... params) { - E e = new E(); - e.ex = t; - if (params != null && params.length > 1) { - e.file = Objects.toString(params[0]); - e.msg = Objects.toString(params[1]); - } - errs.add(e); - } - } - - /** - * Checks that invalid/non-components/broken stuff is reported. When the user specifies - * directory as catalog source, it's probably important to report invalid data. - */ - @Test - public void testReportBrokenComponents() throws Exception { - Path testData = dataFile("dir1"); - DirectoryCatalogProvider prov = new DirectoryCatalogProvider(testData, this); - FB fb = new FB(); - delegateFeedback(fb); - - Set ids = prov.listComponentIDs(); - assertEquals(2, ids.size()); - assertEquals(3, fb.errs.size()); - } - - /** - * Implied directory catalogs (to resolve dependencies) can scan directories with random - * contents. broken or non-components should be silently ignored. - */ - @Test - public void testSuppressErrorComponents() throws Exception { - Path testData = dataFile("dir1"); - DirectoryCatalogProvider prov = new DirectoryCatalogProvider(testData, this); - prov.setReportErrors(false); - FB fb = new FB(); - delegateFeedback(fb); - - Set ids = prov.listComponentIDs(); - assertEquals(2, ids.size()); - assertTrue(fb.errs.isEmpty()); - } - - @Test - public void testDifferentRequirementsFiltered() throws Exception { - Path testData = dataFile("dir1"); - DirectoryCatalogProvider prov = new DirectoryCatalogProvider(testData, this); - Set ids = prov.listComponentIDs(); - assertEquals(2, ids.size()); - // typo is there... - Collection infos = prov.loadComponentMetadata("org.graavm.ruby"); - assertEquals(2, infos.size()); - - CatalogContents contents = new CatalogContents(this, prov, getLocalRegistry()); - Version.Match m = getLocalRegistry().getGraalVersion().match(Version.Match.Type.INSTALLABLE); - - // check that the JDK11 component gets removed - Collection catInfos = contents.loadComponents("org.graavm.ruby", m, false); - assertEquals(1, catInfos.size()); - - ComponentInfo ci = catInfos.iterator().next(); - assertEquals(testData.resolve("ruby.jar").toUri().toURL(), ci.getRemoteURL()); - } - - @Test - public void testSpecificJavaPresent() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_JAVA_VERSION, "11"); - Path testData = dataFile("dir1"); - DirectoryCatalogProvider prov = new DirectoryCatalogProvider(testData, this); - Set ids = prov.listComponentIDs(); - assertEquals(2, ids.size()); - // typo is there... - Collection infos = prov.loadComponentMetadata("org.graavm.ruby"); - assertEquals(2, infos.size()); - - CatalogContents contents = new CatalogContents(this, prov, getLocalRegistry()); - Version.Match m = getLocalRegistry().getGraalVersion().match(Version.Match.Type.INSTALLABLE); - - // both Ruby should pass: ruby.jar has no jdk restriction - Collection catInfos = contents.loadComponents("org.graavm.ruby", m, false); - assertEquals(2, catInfos.size()); - - Set urls = new HashSet<>(Arrays.asList( - testData.resolve("ruby.jar").toUri().toURL(), - testData.resolve("ruby-11.jar").toUri().toURL())); - Iterator itC = catInfos.iterator(); - ComponentInfo ci = itC.next(); - assertTrue(urls.remove(ci.getRemoteURL())); - ci = itC.next(); - assertTrue(urls.remove(ci.getRemoteURL())); - } - - /** - * Checks that the merging catalog initializes the directory provider correctly. - * - * @throws Exception - */ - @Test - public void testNoErrorsWithLocalCatalogs() throws Exception { - URL clu = getClass().getResource("data/catalog"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - Handler.bind(u.toString(), - clu); - - Path testData = dataFile("dir1"); - SoftwareChannelSource scs = new SoftwareChannelSource(testData.toUri().toURL().toString(), "local dir"); - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.33-dev"); - - FB fb = new FB(); - delegateFeedback(fb); - - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, u); - d.addLocalChannelSource(scs); - registry = openCatalog(d); - - // directory contents scanned / component found - ComponentInfo info = registry.findComponent("org.graalvm.llvm-toolchain"); - assertNotNull(info); - // catalog loaded / component found - info = registry.findComponent("ruby"); - assertNotNull(info); - - // no errors - assertTrue(fb.errs.isEmpty()); - } - - ComponentCatalog openCatalog(SoftwareChannel ch) throws IOException { - return openCatalog(ch, getLocalRegistry().getGraalVersion()); - } - - ComponentCatalog openCatalog(SoftwareChannel ch, Version v) throws IOException { - ComponentCatalog cc = new CatalogContents(this, ch.getStorage(), getLocalRegistry(), v); - cc.getComponentIDs(); - return cc; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryChannelFactoryTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryChannelFactoryTest.java deleted file mode 100644 index 222e39c3446e..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryChannelFactoryTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collections; -import java.util.List; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.GraalEdition; -import org.graalvm.component.installer.remote.RemoteCatalogDownloader; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class DirectoryChannelFactoryTest extends CommandTestBase implements CommandInput.CatalogFactory { - RemoteCatalogDownloader downloader; - - @Test - public void testEmptyDownloaderProducesNothing() throws Exception { - downloader = new RemoteCatalogDownloader(this, this, (URL) null); - - ComponentInfo info = getRegistry().findComponent("org.graalvm.ruby"); - assertNull(info); - } - - @Test - public void testLoadFromEmptyDirectory() throws Exception { - Path nf = testFolder.newFolder().toPath(); - Path ruby033 = dataFile("data/truffleruby3.jar"); - Files.copy(ruby033, nf.resolve(ruby033.getFileName())); - // truffleruby3 declares that version - storage.graalInfo.put(BundleConstants.GRAAL_VERSION, "0.33-dev"); - - downloader = new RemoteCatalogDownloader(this, this, (URL) null); - SoftwareChannelSource scs = new SoftwareChannelSource(nf.toUri().toString()); - downloader.addLocalChannelSource(scs); - - ComponentInfo info = getRegistry().findComponent("ruby"); - assertNotNull(info); - } - - @Override - public ComponentCatalog createComponentCatalog(CommandInput input) { - return new CatalogContents(this, downloader.getStorage(), getLocalRegistry()); - } - - @Override - public CatalogFactory getCatalogFactory() { - return this; - } - - @Override - public List listEditions(ComponentRegistry targetGraalVM) { - return Collections.emptyList(); - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryMetaLoader.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryMetaLoader.java deleted file mode 100644 index c641c886a9da..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryMetaLoader.java +++ /dev/null @@ -1,240 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UncheckedIOException; -import java.nio.channels.ReadableByteChannel; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.function.Function; -import java.util.jar.Manifest; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.graalvm.component.installer.Archive; -import static org.graalvm.component.installer.BundleConstants.META_INF_PATH; -import static org.graalvm.component.installer.BundleConstants.META_INF_PERMISSIONS_PATH; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.junit.Assert; - -/** - * - * @author sdedic - */ -public final class DirectoryMetaLoader extends ComponentPackageLoader { - private final Path rootDir; - private Manifest mani; - - private DirectoryMetaLoader(Path rootDir, Function supplier, Feedback feedback) { - super(supplier, feedback); - this.rootDir = rootDir; - } - - private Manifest getManifest() { - if (mani != null) { - return mani; - } - try (InputStream istm = Files.newInputStream(rootDir.resolve(Paths.get("META-INF", "MANIFEST.MF")))) { - mani = new Manifest(istm); - } catch (IOException ex) { - Assert.fail("Failure reading manifest"); - } - return mani; - } - - public static DirectoryMetaLoader create(Path rotoDir, Feedback feedback) { - ManifestValues vv = new ManifestValues(); - DirectoryMetaLoader ldr = new DirectoryMetaLoader(rotoDir, vv, feedback); - vv.loader = ldr; - return ldr; - } - - private static class ManifestValues implements Function { - private DirectoryMetaLoader loader; - - ManifestValues() { - } - - @Override - public String apply(String t) { - return loader.getManifest().getMainAttributes().getValue(t); - } - } - - @Override - public void loadPaths() { - ComponentInfo cinfo = getComponentInfo(); - Set emptyDirectories = new HashSet<>(); - List files = new ArrayList<>(); - - try { - Files.walk(rootDir).forEachOrdered((Path en) -> { - String eName = SystemUtils.toCommonPath(en); - if (eName.startsWith(META_INF_PATH)) { - return; - } - int li = eName.lastIndexOf("/", Files.isDirectory(en) ? eName.length() - 2 : eName.length() - 1); - if (li > 0) { - emptyDirectories.remove(eName.substring(0, li + 1)); - } - if (Files.isDirectory(en)) { - // directory names always come first - emptyDirectories.add(eName); - } else { - files.add(eName); - } - }); - addFiles(new ArrayList<>(emptyDirectories)); - // sort empty directories first - Collections.sort(files); - cinfo.addPaths(files); - addFiles(files); - } catch (IOException ex) { - throw new UncheckedIOException(ex); - } - } - - @Override - public Map loadSymlinks() throws IOException { - return super.loadSymlinks(); // To change body of generated methods, choose Tools | - // Templates. - } - - @Override - public Map loadPermissions() throws IOException { - Path permissionsPath = rootDir.resolve(SystemUtils.fromCommonRelative(META_INF_PERMISSIONS_PATH)); - if (!Files.exists(permissionsPath)) { - return Collections.emptyMap(); - } - try (BufferedReader r = new BufferedReader(new InputStreamReader( - Files.newInputStream(permissionsPath), "UTF-8"))) { - Map permissions = parsePermissions(r); - return permissions; - } - } - - @Override - public String getLicenseID() { - return super.getLicenseID(); // To change body of generated methods, choose Tools | - // Templates. - } - - public class FE implements Archive.FileEntry { - private final Path path; - - public FE(Path p) { - this.path = p; - } - - @Override - public String getName() { - return SystemUtils.toCommonPath(rootDir.relativize(path)); - } - - @Override - public boolean isDirectory() { - return Files.isDirectory(path); - } - - @Override - public boolean isSymbolicLink() { - return Files.isSymbolicLink(path); - } - - @Override - public String getLinkTarget() throws IOException { - return SystemUtils.toCommonPath(Files.readSymbolicLink(path)); - } - - @Override - public long getSize() { - try { - return Files.size(path); - } catch (IOException ex) { - return -1; - } - } - - } - - public class DirArchive implements Archive { - public DirArchive() { - } - - @Override - public InputStream getInputStream(FileEntry e) throws IOException { - return Files.newInputStream(((FE) e).path); - } - - @Override - public boolean checkContentsMatches(ReadableByteChannel bc, FileEntry entry) throws IOException { - return true; - } - - @Override - public boolean verifyIntegrity(CommandInput input) throws IOException { - return true; - } - - @Override - public void completeMetadata(ComponentInfo info) throws IOException { - } - - @Override - public void close() throws IOException { - } - - @Override - public Iterator iterator() { - Stream stream; - try { - stream = Files.walk(rootDir).sequential(); - } catch (IOException ex) { - throw new UncheckedIOException(ex); - } - return stream.filter((t) -> !rootDir.resolve(t).equals(rootDir)).map((p) -> (Archive.FileEntry) new FE(p)).collect(Collectors.toList()).iterator(); - } - - } - - @Override - public Archive getArchive() { - return new DirArchive(); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryStorageTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryStorageTest.java deleted file mode 100644 index 1c8e91dbee81..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/DirectoryStorageTest.java +++ /dev/null @@ -1,752 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import java.nio.file.attribute.PosixFileAttributeView; -import java.nio.file.attribute.PosixFilePermissions; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.stream.Collectors; - -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.DistributionType; -import org.graalvm.component.installer.model.StabilityLevel; -import org.junit.After; -import org.junit.AfterClass; -import static org.junit.Assert.assertNotNull; -import org.junit.Assume; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.junit.rules.TemporaryFolder; -import org.junit.rules.TestName; - -public class DirectoryStorageTest extends CommandTestBase { - @Rule public TestName name = new TestName(); - @Rule public TemporaryFolder workDir = new TemporaryFolder(); - @Rule public ExpectedException exception = ExpectedException.none(); - - private DirectoryStorage storage; - private Path registryPath; - private Path graalVMPath; - - public DirectoryStorageTest() { - } - - @BeforeClass - public static void setUpClass() { - } - - @AfterClass - public static void tearDownClass() { - } - - @Before - @Override - public void setUp() throws Exception { - super.setUp(); - graalVMPath = workDir.newFolder("graal").toPath(); - Files.createDirectory(graalVMPath.resolve("bin")); - registryPath = workDir.newFolder("registry").toPath(); - - storage = new DirectoryStorage(this, registryPath, graalVMPath); - // the default assumed by most test data. - storage.setJavaVersion("8"); - } - - @After - public void tearDown() { - } - - /** - * Test of loadGraalVersionInfo method, of class RegistryStorage. - */ - @Test - public void testLoadGraalVersionSimple() throws Exception { - try (InputStream is = getClass().getResourceAsStream("release_simple.properties")) { - Files.copy(is, graalVMPath.resolve(SystemUtils.fileName("release"))); - } - Map result = storage.loadGraalVersionInfo(); - assertEquals(7, result.size()); - assertEquals(CommonConstants.EDITION_CE, result.get(CommonConstants.CAP_EDITION)); - } - - @Test - public void testLoadGraalVersionSimpleEE() throws Exception { - try (InputStream is = getClass().getResourceAsStream("release_ee_simple.properties")) { - Files.copy(is, graalVMPath.resolve(SystemUtils.fileName("release"))); - } - Map result = storage.loadGraalVersionInfo(); - assertEquals(7, result.size()); - assertEquals("ee", result.get(CommonConstants.CAP_EDITION)); - } - - @Test - public void testFailToLoadReleaseFile() throws Exception { - exception.expect(FailedOperationException.class); - Map result = storage.loadGraalVersionInfo(); - assertEquals(7, result.size()); - } - - @Test - public void testLoadReleaseWithInvalidSourceVersions() throws Exception { - try (InputStream is = getClass().getResourceAsStream("release_noVersion.properties")) { - Files.copy(is, graalVMPath.resolve(SystemUtils.fileName("release"))); - } - exception.expect(FailedOperationException.class); - exception.expectMessage("STORAGE_InvalidReleaseFile"); - - storage.loadGraalVersionInfo(); - } - - @Test - public void testLoadGraalVersionCorrupted() throws Exception { - try (InputStream is = getClass().getResourceAsStream("release_corrupted.properties")) { - Files.copy(is, graalVMPath.resolve(SystemUtils.fileName("release"))); - } - exception.expect(FailedOperationException.class); - exception.expectMessage("STORAGE_InvalidReleaseFile"); - storage.loadGraalVersionInfo(); - } - - @Test - public void testLoadMetadata() throws Exception { - Path p = dataFile("list1/fastr.component"); - ComponentInfo info; - - try (InputStream is = Files.newInputStream(p)) { - info = storage.loadMetadataFrom(is); - } - assertEquals("org.graalvm.fastr", info.getId()); - assertEquals("1.0", info.getVersionString()); - assertEquals("0.32", info.getRequiredGraalValues().get("graalvm_version")); - } - - @Test - public void testLoadProvidedCapabilities() throws Exception { - Path p = dataFile("data/core1.component"); - ComponentInfo info; - - try (InputStream is = Files.newInputStream(p)) { - info = storage.loadMetadataFrom(is); - } - assertEquals("org.graalvm", info.getId()); - assertEquals(Version.fromString("1.0.1.0"), info.getProvidedValue("version", Version.class)); - assertEquals("ee", info.getProvidedValue("edition", String.class)); - } - - /** - * Test of listComponentIDs method, of class RegistryStorage. - */ - @Test - public void testListComponentsSimple() throws Exception { - copyDir("list1", registryPath); - List comps = new ArrayList<>(storage.listComponentIDs()); - Collections.sort(comps); - comps.remove(BundleConstants.GRAAL_COMPONENT_ID); - assertEquals(Arrays.asList("fastr", "fastr-2", "ruby", "sulong"), comps); - } - - @Test - public void testListComponentsEmpty() throws Exception { - copyDir("emptylist", registryPath); - List comps = new ArrayList<>(storage.listComponentIDs()); - comps.remove(BundleConstants.GRAAL_COMPONENT_ID); - assertEquals(Collections.emptyList(), comps); - } - - private ComponentInfo loadLastComponent(String id) throws IOException { - Set infos = storage.loadComponentMetadata(id); - if (infos == null || infos.isEmpty()) { - return null; - } - List sorted = new ArrayList<>(infos); - Collections.sort(sorted, ComponentInfo.versionComparator()); - return sorted.get(sorted.size() - 1); - } - - /** - * Test of loadComponentMetadata method, of class RegistryStorage. - */ - @Test - public void testLoadComponentMetadata() throws Exception { - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - assertEquals("org.graalvm.fastr", info.getId()); - assertEquals("1.0", info.getVersionString()); - assertEquals("0.32", info.getRequiredGraalValues().get("graalvm_version")); - } - - /** - * Test of loadComponentMetadata method, of class RegistryStorage. - */ - @Test - public void testLoadComponentMetadata2() throws Exception { - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr-2"); - assertEquals("org.graalvm.fastr", info.getId()); - - assertTrue(info.getWorkingDirectories().contains("jre/languages/test/scrap")); - assertTrue(info.getWorkingDirectories().contains("jre/lib/test/scrapdir")); - } - - /** - * Should strip whitespaces around. - * - * @throws Exception - */ - @Test - public void loadComponentFiles() throws Exception { - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - storage.loadComponentFiles(info); - List paths = info.getPaths(); - assertEquals(Arrays.asList( - "bin/", "bin/R", "bin/Rscript"), paths.subList(0, 3)); - } - - /** - * Should strip whitespaces around. - * - * @throws Exception - */ - @Test - public void loadComponentFilesMissing() throws Exception { - copyDir("list1", registryPath); - Files.delete(registryPath.resolve(SystemUtils.fileName("org.graalvm.fastr.filelist"))); - - ComponentInfo info = loadLastComponent("fastr"); - storage.loadComponentFiles(info); - List paths = info.getPaths(); - assertTrue(paths.isEmpty()); - } - - /** - * Test of loadComponentMetadata method, of class RegistryStorage. - */ - @Test - public void testLoadMissingComponentMetadata() throws Exception { - copyDir("list1", registryPath); - assertNull(loadLastComponent("rrr")); - } - - @Test - public void testLoadReplacedFiles() throws Exception { - try (InputStream is = getClass().getResourceAsStream("replaced-files.properties")) { - Files.copy(is, registryPath.resolve(SystemUtils.fileName("replaced-files.properties"))); - } - Map> replaced = storage.readReplacedFiles(); - assertEquals(new HashSet<>(Arrays.asList("fastr", "ruby")), new HashSet<>(replaced.get("shared/lib/jline.jar"))); - assertEquals(new HashSet<>(Arrays.asList("ruby", "sulong")), new HashSet<>(replaced.get("share/other/whatever.jar"))); - } - - @Test - public void testLoadReplacedFilesMissing() throws Exception { - Map> replaced = storage.readReplacedFiles(); - assertTrue(replaced.isEmpty()); - } - - /** - * Test of updateReplacedFiles method, of class RegistryStorage. - */ - @Test - public void testUpdateReplacedFiles() throws Exception { - Map> paths = new HashMap<>(); - paths.put("whatever/lib.jar", Arrays.asList("fastr", "sulong")); - storage.updateReplacedFiles(paths); - Path regPath = registryPath.resolve(SystemUtils.fileName("replaced-files.properties")); - Path goldenPath = dataFile("golden-replaced-files.properties"); - List lines1 = Files.readAllLines(goldenPath); - List lines2 = Files.readAllLines(regPath).stream().filter((s) -> !s.startsWith("#")).collect(Collectors.toList()); - assertEquals(lines1, lines2); - } - - /** - * Test of updateReplacedFiles method, of class RegistryStorage. - */ - @Test - public void testUpdateReplacedFilesNone() throws Exception { - try (InputStream is = getClass().getResourceAsStream("replaced-files.properties")) { - Files.copy(is, registryPath.resolve(SystemUtils.fileName("replaced-files.properties"))); - } - Map> paths = new HashMap<>(); - storage.updateReplacedFiles(paths); - Path regPath = registryPath.resolve(SystemUtils.fileName("replaced-files.properties")); - assertFalse(Files.exists(regPath)); - } - - /** - * Test of updateReplacedFiles method, of class RegistryStorage. - */ - @Test - public void testUpdateReplacedFilesEmpty() throws Exception { - Map> paths = new HashMap<>(); - // make some existing file - Path goldenPath = dataFile("golden-replaced-files.properties"); - Path regPath = registryPath.resolve(SystemUtils.fileName("replaced-files.properties")); - Files.copy(goldenPath, regPath, StandardCopyOption.REPLACE_EXISTING); - storage.updateReplacedFiles(paths); - - // should be deleted - assertFalse(Files.exists(regPath)); - - storage.updateReplacedFiles(paths); - // should not be created - assertFalse(Files.exists(regPath)); - } - - /** - * Test of deleteComponent method, of class RegistryStorage. - */ - @Test - public void testDeleteComponent() throws Exception { - copyDir("list2", registryPath); - storage.deleteComponent("fastr"); - - Path fastrComp = registryPath.resolve(SystemUtils.fileName("fastr.component")); - Path fastrList = registryPath.resolve(SystemUtils.fileName("fastr.filelist")); - - assertFalse(Files.exists(fastrComp)); - assertFalse(Files.exists(fastrList)); - - storage.deleteComponent("sulong"); - Path sulongComp = registryPath.resolve(SystemUtils.fileName("sulong.component")); - assertFalse(Files.exists(sulongComp)); - - storage.deleteComponent("leftover"); - Path leftoverList = registryPath.resolve(SystemUtils.fileName("leftover.filelist")); - assertFalse(Files.exists(leftoverList)); - } - - /** - * Test of deleteComponent method, of class RegistryStorage. - */ - @Test - public void testDeleteComponentFailure() throws Exception { - if (isWindows()) { - return; - } - - copyDir("list2", registryPath); - Files.setPosixFilePermissions(registryPath, PosixFilePermissions.fromString("r--r--r--")); - - exception.expect(IOException.class); - try { - storage.deleteComponent("fastr"); - } finally { - try { - // revert permissions, so JUnit can erase temp directory - Files.setPosixFilePermissions(registryPath, PosixFilePermissions.fromString("rwxrwxrwx")); - } catch (IOException ex) { - ex.printStackTrace(); - } - } - } - - /** - * Test of metaToProperties method, of class RegistryStorage. - */ - @Test - public void testMetaToProperties() { - ComponentInfo info = new ComponentInfo("x", "y", "2.0"); - info.addRequiredValue("a", "b"); - - Properties props = DirectoryStorage.metaToProperties(info); - assertEquals("x", props.getProperty(BundleConstants.BUNDLE_ID)); - assertEquals("y", props.getProperty(BundleConstants.BUNDLE_NAME)); - assertEquals("2.0", props.getProperty(BundleConstants.BUNDLE_VERSION)); - assertEquals("b", props.getProperty(BundleConstants.BUNDLE_REQUIRED + "-a")); - } - - @Test - public void testSaveComponent() throws Exception { - ComponentInfo info = new ComponentInfo("x", "y", "2.0"); - info.addRequiredValue("a", "b"); - Path p = registryPath.resolve(SystemUtils.fileName("x.component")); - assertFalse(Files.exists(p)); - storage.saveComponent(info); - assertTrue(Files.exists(p)); - List lines = Files.readAllLines(p).stream() - .filter((l) -> !l.startsWith("#")) - .collect(Collectors.toList()); - List golden = Files.readAllLines(dataFile("golden-save-component.properties")).stream() - .filter((l) -> !l.startsWith("#")) - .collect(Collectors.toList()); - golden.sort(String.CASE_INSENSITIVE_ORDER); - lines.sort(String.CASE_INSENSITIVE_ORDER); - - assertEquals(golden, lines); - - } - - @Test - public void testSaveComponentWithCapabilities() throws Exception { - ComponentInfo info = new ComponentInfo("x", "y", "2.0"); - info.provideValue("a", "foo"); - info.provideValue("v", Version.fromString("1.1.1")); - Path p = registryPath.resolve(SystemUtils.fileName("x.component")); - assertFalse(Files.exists(p)); - storage.saveComponent(info); - assertTrue(Files.exists(p)); - List lines = Files.readAllLines(p).stream() - .filter((l) -> !l.startsWith("#")) - .collect(Collectors.toList()); - List golden = Files.readAllLines(dataFile("golden-save-component2.properties")).stream() - .filter((l) -> !l.startsWith("#")) - .collect(Collectors.toList()); - golden.sort(String.CASE_INSENSITIVE_ORDER); - lines.sort(String.CASE_INSENSITIVE_ORDER); - - assertEquals(golden, lines); - - } - - @Test - public void saveComponentOptionalTags() throws Exception { - ComponentInfo info = new ComponentInfo("x", "y", "2.0"); - info.addWorkingDirectories(Arrays.asList( - "jre/languages/test/scrap", - "jre/lib/test/scrapdir")); - - Path p = registryPath.resolve(SystemUtils.fileName("x.component")); - assertFalse(Files.exists(p)); - storage.saveComponent(info); - assertTrue(Files.exists(p)); - - List lines = Files.readAllLines(p).stream() - .filter((l) -> !l.startsWith("#")) - .collect(Collectors.toList()); - List golden = Files.readAllLines(dataFile("golden-save-optional.properties")).stream() - .filter((l) -> !l.startsWith("#")) - .collect(Collectors.toList()); - golden.sort(String.CASE_INSENSITIVE_ORDER); - lines.sort(String.CASE_INSENSITIVE_ORDER); - - assertEquals(golden, lines); - - } - - @Test - public void saveComponentFiles() throws Exception { - ComponentInfo info = new ComponentInfo("x", "y", "2.0"); - info.addPaths(Arrays.asList("SecondPath/file", "FirstPath/directory/")); - - Path p = registryPath.resolve(SystemUtils.fileName("x.filelist")); - assertFalse(Files.exists(p)); - storage.saveComponentFileList(info); - assertTrue(Files.exists(p)); - - List lines = Files.readAllLines(p).stream() - .filter((l) -> !l.startsWith("#")) - .collect(Collectors.toList()); - List golden = Files.readAllLines(dataFile("golden-save-filelist.properties")).stream() - .filter((l) -> !l.startsWith("#")) - .collect(Collectors.toList()); - golden.sort(String.CASE_INSENSITIVE_ORDER); - lines.sort(String.CASE_INSENSITIVE_ORDER); - - assertEquals(golden, lines); - } - - @Test - public void testAcceptLicense() throws Exception { - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - enableLicensesForTesting(); - storage.recordLicenseAccepted(info, "cafebabe", "This is a dummy license", null); - Path p = registryPath.resolve(SystemUtils.fromCommonString( - MessageFormat.format(DirectoryStorage.LICENSE_FILE_TEMPLATE, "cafebabe", "org.graalvm.fastr"))); - Path p2 = registryPath.resolve(SystemUtils.fromCommonString("licenses/cafebabe")); - assertTrue(Files.isReadable(p)); - assertEquals(Arrays.asList("This is a dummy license"), Files.readAllLines(p2)); - } - - /** - * URLs contain characters not representable in filesystem, check they are transliterated. - * - * @throws Exception - */ - @Test - public void testAcceptLicenseWithUrlId() throws Exception { - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - enableLicensesForTesting(); - storage.recordLicenseAccepted(info, "http://acme.org/license.txt", "This is a dummy license", null); - Path p = registryPath.resolve(SystemUtils.fromCommonString( - MessageFormat.format(DirectoryStorage.LICENSE_FILE_TEMPLATE, "http___acme.org_license.txt", "org.graalvm.fastr"))); - Path p2 = registryPath.resolve(SystemUtils.fromCommonString("licenses/http___acme.org_license.txt")); - Path p3 = registryPath.resolve(SystemUtils.fromCommonString("licenses/http___acme.org_license.txt.id")); - assertTrue(Files.isReadable(p)); - assertEquals(Arrays.asList("This is a dummy license"), Files.readAllLines(p2)); - assertTrue(Files.isReadable(p3)); - assertEquals(Arrays.asList("http://acme.org/license.txt"), Files.readAllLines(p3)); - } - - /** - * Acceptance test must use transliteration, too. - * - * @throws Exception - */ - @Test - public void testCheckedAcceptedURLLicense() throws Exception { - String urlString = "http://acme.org/license.txt"; - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - enableLicensesForTesting(); - storage.recordLicenseAccepted(info, urlString, "This is a dummy license", null); - - assertNotNull(storage.licenseAccepted(info, urlString)); - } - - /** - * When listing licenses, Ids cannot be transliterated back, so they are stored\ aside. - * - * @throws Exception - */ - @Test - public void testCheckedAcceptedURLLicenseListed() throws Exception { - String urlString = "http://acme.org/license.txt"; - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - enableLicensesForTesting(); - storage.recordLicenseAccepted(info, urlString, "This is a dummy license", null); - - Map> lics = storage.findAcceptedLicenses(); - assertNotNull(lics.get(urlString)); - } - - @Test - public void testLicenseAccepted1() throws Exception { - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - ComponentInfo info2 = loadLastComponent("ruby"); - - Path p = registryPath.resolve(SystemUtils.fromCommonString( - MessageFormat.format(DirectoryStorage.LICENSE_FILE_TEMPLATE, "cafebabe", "org.graalvm.fastr"))); - Files.createDirectories(p.getParent()); - Files.write(p, Arrays.asList("ahoj")); - - enableLicensesForTesting(); - assertNotNull(storage.licenseAccepted(info, "cafebabe")); - assertNotNull(storage.licenseAccepted(info2, "cafebabe")); - } - - /** - * Checks that license management is disabled, that is no license is reported as accepted even - * if the data (by some miracle) exist. - */ - @Test - public void testLicensesDecativated() throws Exception { - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - - Path p = registryPath.resolve(SystemUtils.fromCommonString("licenses/cafebabe.accepted/org.graalvm.fastr")); - Files.createDirectories(p.getParent()); - Files.write(p, Arrays.asList("ahoj")); - assertNull(storage.licenseAccepted(info, "cafebabe")); - } - - /** - * Checks that no license is recorded, as the feature must be disabled. - */ - @Test - public void testLicensesNotRecorded() throws Exception { - copyDir("list1", registryPath); - ComponentInfo info = loadLastComponent("fastr"); - - Path p = registryPath.resolve(SystemUtils.fromCommonString("licenses/cafebabe.accepted/org.graalvm.fastr")); - Files.createDirectories(p.getParent()); - Files.write(p, Arrays.asList("ahoj")); - - assertNull(storage.licenseAccepted(info, "cafebabe")); - } - - /** - * Checks that graalvm.core is present in the list. - */ - @Test - public void testCoreComponentPresent() throws Exception { - copyDir("list1", registryPath); - assertTrue("Must contain graalvm core", storage.listComponentIDs().contains(BundleConstants.GRAAL_COMPONENT_ID)); - } - - @Test - public void testKnowsNativeComponent() throws Exception { - copyDir("list3", registryPath); - Collection ids = storage.listComponentIDs(); - assertTrue(ids.contains("fastr")); - assertTrue(ids.contains("ruby")); - Set cis = storage.loadComponentMetadata("ruby"); - assertEquals(1, cis.size()); - ComponentInfo ci = cis.iterator().next(); - assertTrue(ci.isNativeComponent()); - } - - @Test - public void testRefuseInstallationForROPosix() throws Exception { - PosixFileAttributeView posix = registryPath.getFileSystem().provider().getFileAttributeView(registryPath, PosixFileAttributeView.class); - Assume.assumeTrue("Not a POSIX system", posix != null); - try { - // simulate an unreadable directory: - posix.setPermissions(PosixFilePermissions.fromString("r-xr-xr-x")); - - exception.expect(FailedOperationException.class); - exception.expectMessage("ERROR_MustBecomeUser"); - storage.saveComponent(null); - } finally { - posix.setPermissions(PosixFilePermissions.fromString("rwxrwxr-x")); - } - } - - @Test - public void testGraalVMCoreComponentNative() throws Exception { - // fake a release file - Files.copy(dataFile("release_simple.properties"), graalVMPath.resolve("release")); - Path meta = registryPath.resolve(BundleConstants.GRAAL_COMPONENT_ID + ".meta"); - // create the component storage, tag core component with .meta file - Files.createFile(meta); - - Set infos = storage.loadComponentMetadata(BundleConstants.GRAAL_COMPONENT_ID); - assertEquals(1, infos.size()); - ComponentInfo ci = infos.iterator().next(); - assertTrue(ci.isNativeComponent()); - } - - @Test - public void testGraalVMCoreComponentRegular() throws Exception { - Files.copy(dataFile("release_simple.properties"), graalVMPath.resolve("release")); - - Set infos = storage.loadComponentMetadata(BundleConstants.GRAAL_COMPONENT_ID); - assertEquals(1, infos.size()); - ComponentInfo ci = infos.iterator().next(); - assertFalse(ci.isNativeComponent()); - } - - /** - * Checks that the 'stability level' is saved to the registry. - */ - @Test - public void testStabilityLevelSaved() throws Exception { - ComponentInfo info = new ComponentInfo("x", "y", "2.0"); - info.setStability(StabilityLevel.Experimental_Earlyadopter); - storage.saveComponent(info); - - Properties props = new Properties(); - try (InputStream is = Files.newInputStream(registryPath.resolve("x.component"))) { - props.load(is); - } - // check the -Level was saved, and corresponds to the enum's text - String p = props.getProperty(BundleConstants.BUNDLE_STABILITY2); - assertEquals(StabilityLevel.Experimental_Earlyadopter.toString(), p); - assertNull(props.getProperty(BundleConstants.BUNDLE_STABILITY)); - - // recreate the storage: - storage = new DirectoryStorage(this, registryPath, graalVMPath); - // the default assumed by most test data. - storage.setJavaVersion("8"); - - Set loaded = storage.loadComponentMetadata("x"); - assertEquals(1, loaded.size()); - ComponentInfo compare = loaded.iterator().next(); - - assertEquals(info.getStability(), compare.getStability()); - } - - /** - * Checks that stability level is loaded from the old property as well. Not strictly necessary, - * but may improve compatibility for older bundled stuff. - */ - @Test - public void testStabilityLevelLoadsOld() throws Exception { - Files.write(registryPath.resolve("x.component"), Arrays.asList( - "Bundle-Name=y", - "Bundle-Symbolic-Name=x", - "Bundle-Version=2.0", - "x-GraalVM-Stability=experimental-earlyadopter")); - Set loaded = storage.loadComponentMetadata("x"); - assertEquals(1, loaded.size()); - ComponentInfo compare = loaded.iterator().next(); - assertEquals(StabilityLevel.Experimental_Earlyadopter, compare.getStability()); - } - - /** - * Checks that the hardcoded core component declares stability level. - */ - @Test - public void testDefaultCoreHasStability() throws Exception { - Files.copy(dataFile("release_simple.properties"), graalVMPath.resolve("release")); - copyDir("emptylist", registryPath); - Set loaded = storage.loadComponentMetadata(BundleConstants.GRAAL_COMPONENT_ID); - assertEquals(1, loaded.size()); - ComponentInfo ci = loaded.iterator().next(); - assertNotNull(ci); - assertEquals(StabilityLevel.Supported, ci.getStability()); - assertFalse(ci.isNativeComponent()); - assertEquals(DistributionType.BUNDLED, ci.getDistributionType()); - } - - /** - * Checks that the core component registration is loaded, if present. - */ - @Test - public void testExplicitCoreMetadata() throws Exception { - Files.copy(dataFile("release_simple.properties"), graalVMPath.resolve("release")); - Files.copy(dataFile("graalvmcore.properties"), registryPath.resolve(BundleConstants.GRAAL_COMPONENT_ID + ".component")); - Set loaded = storage.loadComponentMetadata(BundleConstants.GRAAL_COMPONENT_ID); - assertEquals(1, loaded.size()); - ComponentInfo ci = loaded.iterator().next(); - assertNotNull(ci); - assertEquals(StabilityLevel.Experimental, ci.getStability()); - assertFalse(ci.isNativeComponent()); - assertEquals(DistributionType.BUNDLED, ci.getDistributionType()); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/HeaderParserTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/HeaderParserTest.java deleted file mode 100644 index c8121328a305..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/HeaderParserTest.java +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import org.graalvm.component.installer.MetadataException; -import java.util.Map; -import java.util.Set; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.Version; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -public class HeaderParserTest extends TestBase { - private HeaderParser v(String content) { - return new HeaderParser(BundleConstants.BUNDLE_VERSION, content, withBundle(HeaderParser.class)); - } - - private HeaderParser r(String content) { - return new HeaderParser(BundleConstants.BUNDLE_REQUIRED, content, withBundle(HeaderParser.class)); - } - - private HeaderParser c(String content) { - return new HeaderParser(BundleConstants.BUNDLE_PROVIDED, content, withBundle(HeaderParser.class)); - } - - private HeaderParser d(String content) { - return new HeaderParser(BundleConstants.BUNDLE_DEPENDENCY, content, withBundle(HeaderParser.class)); - } - - private static void assertHeader(MetadataException ex) { - assertEquals(BundleConstants.BUNDLE_VERSION, ex.getOffendingHeader()); - } - - @Test - public void testVersionComponents() { - assertEquals("1", v("1").version()); - assertEquals("1.1", v("1.1").version()); - assertEquals("1.2.1", v("1.2.1").version()); - assertEquals("1.2.1.whatever", v("1.2.1.whatever").version()); - } - - @Test - public void testNonDigitsInVersion() { - try { - v("1a").version(); - fail("Must fail on incorrect major"); - } catch (MetadataException ex) { - assertHeader(ex); - } - try { - v("aa").version(); - fail("Must fail on incorrect major"); - } catch (MetadataException ex) { - assertHeader(ex); - } - try { - v("1.1a").version(); - fail("Must fail on incorrect minor"); - } catch (MetadataException ex) { - assertHeader(ex); - } - try { - v("1.2.1a").version(); - fail("Must fail on incorrect micro"); - } catch (MetadataException ex) { - assertHeader(ex); - } - // relaxed check, this should succeed - v("0.33-dev").version(); - } - - @Test - public void testEmptyVersionComponent() { - try { - v("").version(); - fail("Must fail on empty version"); - } catch (MetadataException ex) { - assertHeader(ex); - } - try { - v(".1").version(); - fail("Must fail on empty major"); - } catch (MetadataException ex) { - assertHeader(ex); - } - try { - v("1..1").version(); - fail("Must fail on empty micro"); - } catch (MetadataException ex) { - assertHeader(ex); - } - try { - v("1.1..").version(); - fail("Must fail on empty micro"); - } catch (MetadataException ex) { - assertHeader(ex); - } - try { - v("1.1.2.").version(); - fail("Must fail on empty qualifier"); - } catch (MetadataException ex) { - assertHeader(ex); - } - } - - @Test(expected = MetadataException.class) - public void testGarbageAfterVersion() { - v("aa 1").version(); - } - - @Test(expected = MetadataException.class) - public void testGarbageBeforeVersion() { - v("1 aa").version(); - } - - @Test - public void testFoo() { - try { - r("org.graalvm; filter := \"()\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - } - - @Test - public void testBadCapabilitySyntax() { - try { - r("foobar").parseRequiredCapabilities(); - fail("Should fail on unkown capability"); - } catch (MetadataException ex) { - assertEquals(BundleConstants.BUNDLE_REQUIRED, ex.getOffendingHeader()); - } - try { - r("foobar = aaa").parseRequiredCapabilities(); - fail("Should fail on invalid syntax"); - } catch (MetadataException ex) { - // expected - } - - try { - r("org.graalvm;").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_MissingVersionFilter", ex.getMessage()); - } - try { - r("org.graalvm; unknown = aaa").parseRequiredCapabilities(); - fail("Should fail on unknown parameter"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedParameters", ex.getMessage()); - } - try { - r("org.graalvm; unknown := aaa").parseRequiredCapabilities(); - fail("Should fail on unknown directive"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedDirectives", ex.getMessage()); - } - try { - r("org.graalvm; filter := aaa").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - try { - r("org.graalvm; filter := ()").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidParameterSyntax", ex.getMessage()); - } - } - - @Test - public void testBadProvideCapabilitySyntax() { - try { - r("org.graalvm; = \"CE\"; native_version:Version=\"19.3").parseProvidedCapabilities(); - fail("Should fail on invalid capability"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidCapabilityName", ex.getMessage()); - } - try { - r("org.graalvm; edition := \"CE\"").parseProvidedCapabilities(); - fail("Should fail on invalid capability syntax"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidCapabilitySyntax", ex.getMessage()); - } - try { - r("org.graalvm; edition :;").parseProvidedCapabilities(); - fail("Should fail on invalid capability syntax"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidCapabilitySyntax", ex.getMessage()); - } - try { - r("org.graalvm; edition : #=\"2\";").parseProvidedCapabilities(); - fail("Should fail on invalid capability syntax"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidCapabilitySyntax", ex.getMessage()); - } - try { - r("org.graalvm; edition:Unknown=\"2\";").parseProvidedCapabilities(); - fail("Should fail on invalid capability syntax"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedCapabilityType", ex.getMessage()); - } - try { - r("org.graalvm; edition").parseProvidedCapabilities(); - fail("Should fail on invalid capability syntax"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidCapabilitySyntax", ex.getMessage()); - } - } - - @Test - public void testReadCapabilities() { - Map caps = r("org.graalvm; edition = \"CE\"; native_version:Version=\"19.3\"").parseProvidedCapabilities(); - assertEquals(2, caps.size()); - assertEquals("CE", caps.get("edition")); - assertNotNull(caps.get("native_version")); - Version v = (Version) caps.get("native_version"); - assertEquals(Version.fromString("19.3"), v); - } - - @Test - public void testBadCapabilityUnsupportedType() { - try { - r("org.graalvm; edition:long=\"2\";").parseProvidedCapabilities(); - fail("Should fail on invalid capability syntax"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedCapabilityType", ex.getMessage()); - } - try { - r("org.graalvm; edition:double=\"2\";").parseProvidedCapabilities(); - fail("Should fail on invalid capability syntax"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedCapabilityType", ex.getMessage()); - } - try { - r("org.graalvm; edition:list=\"2\";").parseProvidedCapabilities(); - fail("Should fail on invalid capability syntax"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedCapabilityType", ex.getMessage()); - } - } - - @Test - public void testBadFilterSyntax() { - try { - r("org.graalvm; filter := \"()\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - try { - r("org.graalvm; filter := \"(\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - } - - @Test - public void testBadFilterParenthesis() { - try { - r("org.graalvm; filter := \"(graalvm_version=0.32\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - try { - r("org.graalvm; filter := \"(graalvm_version=0.32)(whatever=111)\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - try { - r("org.graalvm; filter := \"&(graalvm_version=0.32)(whatever=111)\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - } - - @Test - public void testInvalidFilterAttributeValues() { - try { - r("org.graalvm; filter := \"(&(graalvm_version=0.~32)(whatever=111))\"").parseRequiredCapabilities(); - fail("Should fail on invalid filter attribute value"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - try { - r("org.graalvm; filter := \"(&(graalvm_version=0.>32)(whatever=111))\"").parseRequiredCapabilities(); - fail("Should fail on invalid filter attribute value"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - try { - r("org.graalvm; filter := \"(&(graalvm_version=0.<32)(whatever=111))\"").parseRequiredCapabilities(); - fail("Should fail on invalid filter attribute value"); - } catch (MetadataException ex) { - assertEquals("ERROR_InvalidFilterSpecification", ex.getMessage()); - } - } - - @Test - public void testInvalidFilterOperations() { - try { - r("org.graalvm; filter := \"(graalvm_version>0.32\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedFilterOperation", ex.getMessage()); - } - try { - r("org.graalvm; filter := \"(graalvm_version<0.32\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedFilterOperation", ex.getMessage()); - } - try { - r("org.graalvm; filter := \"(graalvm_version=0.32*eee\"").parseRequiredCapabilities(); - fail("Should fail on missing filter"); - } catch (MetadataException ex) { - assertEquals("ERROR_UnsupportedFilterOperation", ex.getMessage()); - } - } - - @Rule public ExpectedException exc = ExpectedException.none(); - - @Test - public void testFilterValueEscaping() { - Map attrs = r("org.graalvm; filter := \"(graalvm_version=0\\32)\"").parseRequiredCapabilities(); - assertEquals("0\\32", attrs.get("graalvm_version")); - } - - @Test - @SuppressWarnings("rawtypes") - public void testFilterMutlipleValues() { - Map m = r("org.graalvm; filter := \"(&(graalvm_version=0.32)(whatever=111))\"").parseRequiredCapabilities(); - assertEquals("0.32", m.get("graalvm_version")); - assertEquals("111", m.get("whatever")); - } - - @Test - public void testFilterDuplicateValues() { - exc.expect(MetadataException.class); - exc.expectMessage("ERROR_DuplicateFilterAttribute"); - r("org.graalvm; filter := \"(&(graalvm_version=0.32)(graalvm_version=111))\"").parseRequiredCapabilities(); - } - - @Test - public void testSimpleProvidedCapability() { - Map v = c("org.graalvm; edition=ee; graalvm_version=ff").parseProvidedCapabilities(); - assertEquals("ee", v.get("edition")); - assertEquals("ff", v.get("graalvm_version")); - } - - @Test - public void testSimpleProvidedCapabilityBad1() { - exc.expect(MetadataException.class); - exc.expectMessage("ERROR_InvalidCapabilitySyntax"); - c("org.graalvm; edition; graalvm_version=ff").parseProvidedCapabilities(); - } - - @Test - public void testSimpleDependency() { - assertTrue(d("").parseDependencies().isEmpty()); - Set s = d("org.graalvm.llvm-toolchain").parseDependencies(); - assertEquals(1, s.size()); - assertEquals("org.graalvm.llvm-toolchain", s.iterator().next()); - } - - @Test - public void testMultipleDependencies() { - Set s = d("org.graalvm.llvm-toolchain, org.graalvm.native-image").parseDependencies(); - assertEquals(2, s.size()); - assertTrue(s.contains("org.graalvm.llvm-toolchain")); - assertTrue(s.contains("org.graalvm.native-image")); - } - - @Test - public void testRejectVersionedDependency() { - exc.expect(MetadataException.class); - exc.expectMessage("ERROR_DependencyParametersNotSupported"); - d("org.graalvm.llvm-toolchain; bundle-version=19.3").parseDependencies(); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/NetworkTestBase.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/NetworkTestBase.java deleted file mode 100644 index 750098eda404..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/NetworkTestBase.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import org.graalvm.component.installer.CommandTestBase; -import org.junit.Rule; - -public class NetworkTestBase extends CommandTestBase { - @Rule public ProxyResource proxyResource = new ProxyResource(); - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/ProxyResource.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/ProxyResource.java deleted file mode 100644 index bba83a489535..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/ProxyResource.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import org.graalvm.component.installer.persist.test.Handler; -import org.junit.rules.ExternalResource; - -public class ProxyResource extends ExternalResource { - - @Override - protected void after() { - Handler.clear(); - - if (proxyHost != null) { - System.setProperty("http.proxyHost", proxyHost); - } else { - System.clearProperty("http.proxyHost"); - } - if (proxyPort != null) { - System.setProperty("http.proxyPort", proxyPort); - } else { - System.clearProperty("http.proxyPort"); - } - super.after(); // To change body of generated methods, choose Tools | Templates. - } - - @Override - protected void before() throws Throwable { - super.before(); - final String key = "java.protocol.handler.pkgs"; - - String newValue = HANDLER_PACKAGE; - if (System.getProperty(key) != null) { - final String previousValue = System.getProperty(key); - if (!previousValue.contains(newValue)) { - newValue += "|" + previousValue; - } - } - System.setProperty(key, newValue); - - proxyHost = System.getProperty("http.proxyHost"); - proxyPort = System.getProperty("http.proxyPort"); - } - - private static final String HANDLER_PACKAGE = "org.graalvm.component.installer.persist"; - - private String proxyHost; - private String proxyPort; -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/broken1.zip b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/broken1.zip deleted file mode 100644 index db5db8cce306..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/broken1.zip and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenChainedSymlinks.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenChainedSymlinks.properties deleted file mode 100644 index 4ba729d59c63..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenChainedSymlinks.properties +++ /dev/null @@ -1 +0,0 @@ -bin/ruby=jre/bin/rubylauncherx diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenPermissions.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenPermissions.properties deleted file mode 100644 index 02d62cad78f9..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenPermissions.properties +++ /dev/null @@ -1 +0,0 @@ -Path/To/File=eee \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenSymlinks.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenSymlinks.properties deleted file mode 100644 index 865eb3e16b80..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/brokenSymlinks.properties +++ /dev/null @@ -1,5 +0,0 @@ -bin/ruby=../jre/bin/rubylauncher -jre/bin/rubylauncher=rubylauncher2 -jre/bin/rubylauncher2=eeeee - - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/chainedSymlinks.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/chainedSymlinks.properties deleted file mode 100644 index 0a12a265c866..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/chainedSymlinks.properties +++ /dev/null @@ -1,4 +0,0 @@ -bin/ruby=../jre/bin/rubylauncher -jre/bin/rubylauncher=../../jre/bin/rubylauncher2 -jre/bin/rubylauncher2=ruby - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/circularSymlinks.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/circularSymlinks.properties deleted file mode 100644 index 4338ea0c957f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/circularSymlinks.properties +++ /dev/null @@ -1,3 +0,0 @@ -bin/ruby=../jre/bin/rubylauncher -jre/bin/rubylauncher=rubylauncher2 -jre/bin/rubylauncher2=../../bin/ruby diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/catalog b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/catalog deleted file mode 100644 index 588be2b81a80..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/catalog +++ /dev/null @@ -1,12 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: ../0.33-dev/graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/core1.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/core1.component deleted file mode 100644 index 8db465aa77cd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/core1.component +++ /dev/null @@ -1,8 +0,0 @@ -Bundle-Name: GraalVM Core -Bundle-Symbolic-Name: org.graalvm -Bundle-Version: 1.0.1.0 -Bundle-ProvideCapability-edition="ee -Bundle-ProvideCapability-release="candidate -Bundle-ProvideCapability-version=V1.0.1.0 - - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeBundled.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeBundled.properties deleted file mode 100644 index c41f26b2c72d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeBundled.properties +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -x-GraalVM-Component-Distribution: bundled diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeInvalid.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeInvalid.properties deleted file mode 100644 index 7704d34dd271..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeInvalid.properties +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -x-GraalVM-Component-Distribution: bart-simpson - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeMissing.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeMissing.properties deleted file mode 100644 index 705edd4f0d26..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/distributionTypeMissing.properties +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/fastr.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/fastr.properties deleted file mode 100644 index e26790ebec9d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/fastr.properties +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.r -Bundle-Name: FastR -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -Require-Bundle: org.graalvm.llvm-toolchain diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/licensetest.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/licensetest.jar deleted file mode 100644 index 83eb12e75044..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/licensetest.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/llvm-toolchain.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/llvm-toolchain.jar deleted file mode 100644 index 523ae5953e2b..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/llvm-toolchain.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/postinstMessage.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/postinstMessage.jar deleted file mode 100644 index 42f43efdda42..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/postinstMessage.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/requiredKeys.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/requiredKeys.properties deleted file mode 100644 index 9c951db9eb7e..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/requiredKeys.properties +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Symbolic-Name=com.foo.test -Bundle-Name=Booo booo -Bundle-Version=1.0.0 -Bundle-RequireCapability=org.graalvm; filter := "(graalvm_version=0.32)" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/ruby.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/ruby.jar deleted file mode 100644 index c99f57599aab..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/ruby.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelExperimental.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelExperimental.properties deleted file mode 100644 index e81c6f731fe9..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelExperimental.properties +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -x-GraalVM-Stability: experimental - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelExperimental2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelExperimental2.properties deleted file mode 100644 index 387abed834c1..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelExperimental2.properties +++ /dev/null @@ -1,7 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -x-GraalVM-Stability: experimental-earlyadopter - - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelNone.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelNone.properties deleted file mode 100644 index 48111c0e3dc8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelNone.properties +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelUnknown.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelUnknown.properties deleted file mode 100644 index 3b1d93c4cc05..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityLevelUnknown.properties +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -x-GraalVM-Stability: surprise! - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityNew.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityNew.properties deleted file mode 100644 index b214335bb04d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityNew.properties +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -x-GraalVM-Stability-Level: experimental-earlyadopter diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityOld.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityOld.properties deleted file mode 100644 index 2a2bdb84658b..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityOld.properties +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -x-GraalVM-Stability: experimental diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityPrecedence.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityPrecedence.properties deleted file mode 100644 index d283352e1890..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/stabilityPrecedence.properties +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Truffle Ruby -Bundle-Version: 1.0 -Bundle-RequireCapability: org.graalvm; filter := "(&(graalvm_version=0.32)(os_arch=amd64))" -x-GraalVM-Stability-Level: experimental -x-GraalVM-Stability: experimental-earlyadopter diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/truffleruby2.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/truffleruby2.jar deleted file mode 100644 index 122291a96c57..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/truffleruby2.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/truffleruby3.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/truffleruby3.jar deleted file mode 100644 index 42da0a2ad418..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/truffleruby3.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/workingDirectories.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/workingDirectories.properties deleted file mode 100644 index fdf7623c4859..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/data/workingDirectories.properties +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Symbolic-Name=com.foo.test -Bundle-Name=Booo booo -Bundle-Version=1.0.0 -Bundle-RequireCapability=org.graalvm; filter := "(graalvm_version=0.32)" -x-GraalVM-Working-Directories=jre/languages/test/scrap:jre/lib/test/scrapdir diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/invalid-bundle.zip b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/invalid-bundle.zip deleted file mode 100644 index ed1028f28f73..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/invalid-bundle.zip and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/llvm-toolchain.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/llvm-toolchain.jar deleted file mode 100644 index d744675dae6a..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/llvm-toolchain.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/missing-bundle.zip b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/missing-bundle.zip deleted file mode 100644 index a3b26e5bae6b..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/missing-bundle.zip and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/missing-manifest.zip b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/missing-manifest.zip deleted file mode 100644 index b2a3792e5e56..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/missing-manifest.zip and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/ruby-11.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/ruby-11.jar deleted file mode 100644 index c9c7add8dab6..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/ruby-11.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/ruby.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/ruby.jar deleted file mode 100644 index 9f2b170d0639..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/dir1/ruby.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/emptylist/placeholder b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/emptylist/placeholder deleted file mode 100644 index 8b137891791f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/emptylist/placeholder +++ /dev/null @@ -1 +0,0 @@ - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-replaced-files.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-replaced-files.properties deleted file mode 100644 index c74d041a10c6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-replaced-files.properties +++ /dev/null @@ -1 +0,0 @@ -whatever/lib.jar=fastr,sulong diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-component.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-component.properties deleted file mode 100644 index bafbf1ca6f9a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-component.properties +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Name=y -Bundle-RequireCapability-a=b -Bundle-Symbolic-Name=x -Bundle-Version=2.0 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-component2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-component2.properties deleted file mode 100644 index aacfdf26c943..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-component2.properties +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Name=y -Bundle-ProvideCapability-a="foo -Bundle-ProvideCapability-v=V1.1.1 -Bundle-Symbolic-Name=x -Bundle-Version=2.0 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-filelist.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-filelist.properties deleted file mode 100644 index b01a2e269da6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-filelist.properties +++ /dev/null @@ -1,2 +0,0 @@ -FirstPath/directory/ -SecondPath/file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-optional.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-optional.properties deleted file mode 100644 index a423742debba..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/golden-save-optional.properties +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Name=y -Bundle-Symbolic-Name=x -Bundle-Version=2.0 -x-GraalVM-Working-Directories=jre/languages/test/scrap\:jre/lib/test/scrapdir diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/graalvmcore.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/graalvmcore.properties deleted file mode 100644 index 7d2757829620..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/graalvmcore.properties +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Name=GraalVM Core -Bundle-Symbolic-Name=org.graalvm -Bundle-Version=21.1.0 -x-GraalVM-Stability-Level=experimental diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/fastr-2.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/fastr-2.component deleted file mode 100644 index acccf9b82457..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/fastr-2.component +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.fastr -Bundle-Name: Graal FastR implementation -Bundle-Version: 1.0 -Bundle-RequireCapability-graalvm_version: 0.32 -x-GraalVM-Working-Directories=jre/languages/test/scrap\:jre/lib/test/scrapdir diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/fastr.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/fastr.component deleted file mode 100644 index 3d2565e3d4c8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/fastr.component +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.fastr -Bundle-Name: Graal FastR implementation -Bundle-Version: 1.0 -Bundle-RequireCapability-graalvm_version: 0.32 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/org.graalvm.fastr.filelist b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/org.graalvm.fastr.filelist deleted file mode 100644 index 22bd9687800c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/org.graalvm.fastr.filelist +++ /dev/null @@ -1,3 +0,0 @@ - bin/ -bin/R -bin/Rscript \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/ruby.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/ruby.component deleted file mode 100644 index de5590ad3753..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/ruby.component +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.rubt -Bundle-Name: Ruby implementation -Bundle-Version: 1.0 -Bundle-RequireCapability-graalvm_version: 0.32 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/sulong.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list1/sulong.component deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/fastr.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/fastr.component deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/fastr.filelist b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/fastr.filelist deleted file mode 100644 index 22bd9687800c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/fastr.filelist +++ /dev/null @@ -1,3 +0,0 @@ - bin/ -bin/R -bin/Rscript \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/leftover.filelist b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/leftover.filelist deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/ruby.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/ruby.component deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/ruby.filelist b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/ruby.filelist deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/sulong.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list2/sulong.component deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/fastr.component b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/fastr.component deleted file mode 100644 index 3d2565e3d4c8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/fastr.component +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.fastr -Bundle-Name: Graal FastR implementation -Bundle-Version: 1.0 -Bundle-RequireCapability-graalvm_version: 0.32 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/org.graalvm.fastr.filelist b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/org.graalvm.fastr.filelist deleted file mode 100644 index 22bd9687800c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/org.graalvm.fastr.filelist +++ /dev/null @@ -1,3 +0,0 @@ - bin/ -bin/R -bin/Rscript \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/ruby.meta b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/ruby.meta deleted file mode 100644 index 940db989a308..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/list3/ruby.meta +++ /dev/null @@ -1,4 +0,0 @@ -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Name: Ruby implementation -Bundle-Version: 1.0 -Bundle-RequireCapability-graalvm_version: 0.32 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_corrupted.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_corrupted.properties deleted file mode 100644 index c45aeb8f8871..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_corrupted.properties +++ /dev/null @@ -1,5 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -SOURCE=" fastr:f -COMMIT_INFO= - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_ee_simple.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_ee_simple.properties deleted file mode 100644 index 8ea20331e135..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_ee_simple.properties +++ /dev/null @@ -1,4 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -SOURCE=" fastr:f vm-enterprise:d4 -GRAALVM_VERSION="0.30.2" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_noVersion.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_noVersion.properties deleted file mode 100644 index 5a6a61a10d98..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_noVersion.properties +++ /dev/null @@ -1,5 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -SOURCE=" fastr:f -COMMIT_INFO= -#GRAALVM_VERSION="0.30.2" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_simple.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_simple.properties deleted file mode 100644 index 5468e1e22244..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/release_simple.properties +++ /dev/null @@ -1,5 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -SOURCE=" fastr:f3f544be48928c20d68ff403a46affe0522f812c -COMMIT_INFO= -GRAALVM_VERSION="0.30.2" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/replaced-files.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/replaced-files.properties deleted file mode 100644 index 054c535a74e7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/replaced-files.properties +++ /dev/null @@ -1,2 +0,0 @@ -shared/lib/jline.jar=fastr,ruby -share/other/whatever.jar=ruby,sulong diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/test/Handler.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/test/Handler.java deleted file mode 100644 index 5733f6a125e8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/test/Handler.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist.test; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.ConnectException; -import java.net.Proxy; -import java.net.URL; -import java.net.URLConnection; -import java.net.URLStreamHandler; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -public class Handler extends URLStreamHandler { - private static Map bindings = Collections.synchronizedMap(new HashMap<>()); - private static Map connections = Collections.synchronizedMap(new HashMap<>()); - private static Map> multiConnections = Collections.synchronizedMap(new HashMap<>()); - private static Set visitedURLs = Collections.synchronizedSet(new HashSet<>()); - private static Map httpProxyConnections = Collections.synchronizedMap(new HashMap<>()); - - public Handler() { - } - - public static void bind(String s, URL u) { - bindings.put(s, u); - } - - public static void bind(String s, URLConnection con) { - connections.put(s, con); - } - - public static void bindMulti(String s, URLConnection con) { - multiConnections.computeIfAbsent(s, (k) -> new ArrayList<>()).add(con); - } - - public static void bindProxy(String s, URLConnection con) { - httpProxyConnections.put(s, con); - } - - public static void clear() { - bindings.clear(); - connections.clear(); - httpProxyConnections.clear(); - multiConnections.clear(); - visitedURLs.clear(); - } - - public static void clearVisited() { - visitedURLs.clear(); - } - - public static boolean isVisited(String u) { - return visitedURLs.contains(u); - } - - public static boolean isVisited(URL u) { - return visitedURLs.contains(u.toString()); - } - - @Override - protected URLConnection openConnection(URL u, Proxy p) throws IOException { - if (p.type() == Proxy.Type.DIRECT) { - return openConnection(u); - } else if (p.type() != Proxy.Type.HTTP) { - return null; - } - URLConnection c = httpProxyConnections.get(u.toString()); - if (c != null) { - return doOpenConnection(u, c); - } else { - throw new ConnectException(u.toExternalForm()); - } - } - - @Override - protected URLConnection openConnection(URL u) throws IOException { - URLConnection c = connections.get(u.toString()); - if (c == null) { - Collection col = multiConnections.getOrDefault(u.toString(), Collections.emptyList()); - Iterator it = col.iterator(); - if (it.hasNext()) { - c = it.next(); - it.remove(); - } - } - return doOpenConnection(u, c); - } - - private static URLConnection doOpenConnection(URL u, URLConnection c) throws IOException { - visitedURLs.add(u.toString()); - if (c != null) { - return c; - } - URL x = bindings.get(u.toString()); - if (x != null) { - return x.openConnection(); - } - throw new FileNotFoundException("Unsupported"); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/test/TestCatalog.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/test/TestCatalog.java deleted file mode 100644 index 73f4baa23a1b..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/persist/test/TestCatalog.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist.test; - -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.ce.WebCatalog; - -/** - * Stub that accepts also "test:" URL scheme. - * - * @author sdedic - */ -public class TestCatalog implements SoftwareChannel.Factory { - - @Override - public void init(CommandInput input, Feedback output) { - } - - @Override - public SoftwareChannel createChannel(SoftwareChannelSource spec, CommandInput input, Feedback fb) { - if (spec.getLocationURL().startsWith("test://")) { - WebCatalog c = new WebCatalog(spec.getLocationURL(), spec); - c.init(input, fb); - return c; - } - - return null; - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/CatalogCompatTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/CatalogCompatTest.java deleted file mode 100644 index 19014d8ba837..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/CatalogCompatTest.java +++ /dev/null @@ -1,258 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.IOException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.persist.test.Handler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class CatalogCompatTest extends CommandTestBase { - @Rule public ProxyResource proxyResource = new ProxyResource(); - - ComponentCatalog openCatalog(SoftwareChannel ch) throws IOException { - return openCatalog(ch, getLocalRegistry().getGraalVersion()); - } - - ComponentCatalog openCatalog(SoftwareChannel ch, Version v) throws IOException { - ComponentCatalog cc = new CatalogContents(this, ch.getStorage(), getLocalRegistry(), v); - cc.getComponentIDs(); - return cc; - } - - void setupCatalogFormat1(String res) throws Exception { - URL clu = getClass().getResource(res); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - Handler.bind(u.toString(), - clu); - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, u); - registry = openCatalog(d); - } - - /** - * Checks that the pre 1.0 catalog format is still readable. - * - * @throws Exception - */ - @Test - public void testOldFormatReadable() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0"); - setupCatalogFormat1("catalogFormat1.properties"); - assertNotNull(registry.findComponent("ruby")); - assertNotNull(registry.findComponent("python")); - assertNotNull(registry.findComponent("r")); - } - - /** - * Checks that previous versions (RCs) are ignored with the old format. - * - * @throws Exception - */ - @Test - public void testOldFormatIgnoresPrevVersionsAvailable() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0"); - setupCatalogFormat1("catalogFormat1.properties"); - - // interprets user input for 'available' - Version gv = getLocalRegistry().getGraalVersion(); - Version.Match selector = gv.match(Version.Match.Type.INSTALLABLE); - - List infos; - - // check that versions 1.0.0-rcX are ignored for version 1.0.0 - infos = new ArrayList<>(registry.loadComponents("ruby", selector, verbose)); - assertEquals(1, infos.size()); - infos = new ArrayList<>(registry.loadComponents("python", selector, verbose)); - assertEquals(1, infos.size()); - infos = new ArrayList<>(registry.loadComponents("r", selector, verbose)); - assertEquals(1, infos.size()); - } - - /** - * Checks that previous versions (RCs) are ignored with the old format. - * - * @throws Exception - */ - @Test - public void testOldFormatIgnoresPrevVersionsMostRecent() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0"); - setupCatalogFormat1("catalogFormat1.properties"); - - // copied from CatalogIterable, this is what interprets user input for install - Version gv = getLocalRegistry().getGraalVersion(); - Version.Match selector = gv.match(Version.Match.Type.MOSTRECENT); - - List infos; - - // check that versions 1.0.0-rcX are ignored for version 1.0.0 - infos = new ArrayList<>(registry.loadComponents("ruby", selector, verbose)); - assertEquals(1, infos.size()); - infos = new ArrayList<>(registry.loadComponents("python", selector, verbose)); - assertEquals(1, infos.size()); - infos = new ArrayList<>(registry.loadComponents("r", selector, verbose)); - assertEquals(1, infos.size()); - } - - /** - * Checks that future versions in OLD format are not accepted. - */ - @Test - public void testOldFormatIgnoresFutureVersionsAvailable() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0"); - setupCatalogFormat1("catalogFormat2.properties"); - - // this is what interprets user input for 'available' - Version gv = getLocalRegistry().getGraalVersion(); - Version.Match selector = gv.match(Version.Match.Type.INSTALLABLE); - - List infos; - - // check that versions 1.0.0-rcX are ignored for version 1.0.0 - infos = new ArrayList<>(registry.loadComponents("ruby", selector, verbose)); - assertEquals(1, infos.size()); - infos = new ArrayList<>(registry.loadComponents("python", selector, verbose)); - assertEquals(1, infos.size()); - infos = new ArrayList<>(registry.loadComponents("r", selector, verbose)); - assertEquals(1, infos.size()); - } - - /** - * Checks that future versions in OLD format are not accepted. - */ - @Test - public void testOldFormatIgnoresFutureVersionsInstall() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0"); - setupCatalogFormat1("catalogFormat2.properties"); - - // copied from CatalogIterable, this is what interprets user input for install - Version gv = getLocalRegistry().getGraalVersion(); - Version.Match selector = gv.match(Version.Match.Type.MOSTRECENT); - - List infos; - - // check that versions 1.0.0-rcX are ignored for version 1.0.0 - infos = new ArrayList<>(registry.loadComponents("ruby", selector, verbose)); - assertEquals(1, infos.size()); - infos = new ArrayList<>(registry.loadComponents("python", selector, verbose)); - assertEquals(1, infos.size()); - infos = new ArrayList<>(registry.loadComponents("r", selector, verbose)); - assertEquals(1, infos.size()); - } - - /** - * Checks that if a catalog mixes in new-format entries, they're read and processed for new - * versions, too. - * - * @throws Exception - */ - @Test - public void testMixedFormatAllowsFutureVersions() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0"); - setupCatalogFormat1("catalogFormatMix.properties"); - - List infos; - - Version gv = getLocalRegistry().getGraalVersion(); - Version.Match selector = gv.match(Version.Match.Type.INSTALLABLE); - // check that versions 1.0.0-rcX are ignored for version 1.0.0 - infos = new ArrayList<>(registry.loadComponents("ruby", selector, verbose)); - - assertNotNull(infos); - assertEquals(3, infos.size()); - - Collections.sort(infos, ComponentInfo.versionComparator()); - - ComponentInfo one = infos.get(0); - ComponentInfo two = infos.get(1); - ComponentInfo three = infos.get(2); - assertEquals("1.0.0", one.getVersionString()); - assertEquals("1.0.1.0", two.getVersionString()); - assertEquals("1.0.2.0-1", three.getVersionString()); - } - - /** - * Checks that install will attempt to install the most recent stuff for the current release. - * Will add the same-release component to existing instalation - */ - @Test - public void testMixedFormatInstallSameRelease() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0"); - setupCatalogFormat1("catalogFormatMix.properties"); - - List infos; - - Version gv = getLocalRegistry().getGraalVersion(); - Version.Match selector = gv.match(Version.Match.Type.MOSTRECENT); - // check that versions 1.0.0-rcX are ignored for version 1.0.0 - infos = new ArrayList<>(registry.loadComponents("ruby", selector, verbose)); - - assertNotNull(infos); - assertEquals(1, infos.size()); - ComponentInfo one = infos.get(0); - assertEquals("1.0.0", one.getVersionString()); - } - - /** - * Checks that install will attempt to install the most recent stuff with mixed catalog. Will - * upgrade the installation - */ - @Test - public void testMixedFormatInstallUpgrades() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0"); - setupCatalogFormat1("catalogFormatMix.properties"); - - List infos; - - Version gv = getLocalRegistry().getGraalVersion(); - registry.setAllowDistUpdate(true); - Version.Match selector = gv.match(Version.Match.Type.MOSTRECENT); - // check that versions 1.0.0-rcX are ignored for version 1.0.0 - infos = new ArrayList<>(registry.loadComponents("ruby", selector, verbose)); - - assertNotNull(infos); - assertEquals(1, infos.size()); - ComponentInfo one = infos.get(0); - assertEquals("1.0.2.0-1", one.getVersionString()); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/FileDownloaderTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/FileDownloaderTest.java deleted file mode 100644 index 192b90ebf168..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/FileDownloaderTest.java +++ /dev/null @@ -1,401 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import org.graalvm.component.installer.ChunkedConnection; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.net.URLConnection; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicReference; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.persist.NetworkTestBase; -import org.graalvm.component.installer.persist.test.Handler; -import org.junit.Assert; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Test; -import java.net.SocketException; - -public class FileDownloaderTest extends NetworkTestBase { - - class FA extends FeedbackAdapter { - - @Override - public String l10n(String key, Object... params) { - switch (key) { - case "MSG_DownloadProgress@": - return "[ ]"; - case "MSG_DownloadProgressSignChar@": - return "#"; - } - return key; - } - - } - - @Before - @Override - public void setUp() throws Exception { - super.setUp(); - delegateFeedback(new FA()); - Handler.clear(); - } - - @Test - public void testDownloadExistingFile() throws Exception { - URL clu = getClass().getResource("data/truffleruby2.jar"); - Handler.bind("test://graalvm.io/download/truffleruby.zip", - clu); - - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - FileDownloader dn = new FileDownloader("test", - u, this); - dn.download(); - - File local = dn.getLocalFile(); - assertTrue(local.exists()); - assertTrue(local.isFile()); - - URLConnection c = clu.openConnection(); - assertEquals(c.getContentLengthLong(), local.length()); - } - - @Test - public void testDownloadComputeDigest() throws Exception { - URL clu = getClass().getResource("data/truffleruby2.jar"); - Handler.bind("test://graalvm.io/download/truffleruby.zip", - clu); - - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - FileDownloader dn = new FileDownloader("test", - u, this); - dn.setShaDigest(new byte[0]); - dn.download(); - - byte[] check = SystemUtils.toHashBytes("b649fe3b9309d1b3ae4d2dbae70eebd4d2978af32cd1ce7d262ebf7e0f0f53fa"); - assertArrayEquals(check, dn.getReceivedDigest()); - } - - class Check extends FA { - int state; - boolean verbose = true; - int cnt = 0; - StringBuilder bar = new StringBuilder("[ ]"); - String bcksp = "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b"; - - @Override - public boolean verbosePart(String bundleKey, Object... params) { - switch (state) { - case 0: - if ("MSG_DownloadReceivingBytes".equals(bundleKey)) { - state++; - } - break; - } - return super.verbosePart(bundleKey, params); - } - - @Override - public void output(String bundleKey, Object... params) { - if (state == 0 && verbose) { - Assert.assertNotEquals("MSG_Downloading", bundleKey); - } - } - - @Override - public boolean verboseOutput(String bundleKey, Object... params) { - switch (state) { - case 0: - assertEquals("MSG_DownloadingVerbose", bundleKey); - break; - case 5: - if ("MSG_DownloadingDone".equals(bundleKey)) { - state++; - } - break; - } - return super.verboseOutput(bundleKey, params); - } - - @Override - public boolean verbatimPart(String msg, boolean beVerbose) { - switch (state) { - case 1: - assertEquals(bar.toString(), msg); - state++; - break; - case 3: - cnt++; - bar.setCharAt(cnt, '#'); - assertEquals(bar.toString(), msg); - if (cnt >= 20) { - state = 4; - } else { - state = 2; - } - break; - case 2: - assertEquals(msg, bcksp); - state++; - break; - case 4: - assertEquals(msg, bcksp); - state++; - break; - } - return super.verbatimPart(msg, beVerbose); - } - - } - - @Test - public void testDownloadVerboseMessages() throws Exception { - URL clu = getClass().getResource("data/truffleruby2.jar"); - Handler.bind("test://graalvm.io/download/truffleruby.zip", - clu); - - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - Check check = new Check(); - delegateFeedback(check); - FileDownloader dn = new FileDownloader("test", - u, this); - dn.setVerbose(true); - dn.setDisplayProgress(true); - dn.sizeThreshold = 10; - verbose = true; - dn.download(); - - assertEquals(6, check.state); - } - - /** - * Checks that slow proxy will be used although the direct connection has failed already. - * - * @throws Exception - */ - @Test - public void testDownloadSlowProxy() throws Exception { - URL clu = getClass().getResource("data/truffleruby2.jar"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - - ChunkedConnection proxyConnect = new ChunkedConnection( - u, - clu.openConnection()) { - @Override - public void connect() throws IOException { - try { - // called twice, default timeout is 5 secs - Thread.sleep(1000); - } catch (InterruptedException ex) { - } - super.connect(); - } - - }; - - Handler.bindProxy(u.toString(), proxyConnect); - Check check = new Check(); - delegateFeedback(check); - FileDownloader dn = new FileDownloader("test", - u, this); - ProxyConnectionFactory pcf = new ProxyConnectionFactory(this, u); - dn.setConnectionFactory(pcf); - - verbose = true; - dn.setVerbose(true); - dn.setDisplayProgress(true); - - pcf.envHttpProxy = "http://localhost:11111"; - pcf.envHttpsProxy = "http://localhost:11111"; - - dn.download(); - URLConnection c = clu.openConnection(); - assertEquals(c.getContentLengthLong(), dn.getLocalFile().length()); - } - - /** - * Checks that if proxy fails, the direct connection, although it connects later, will be used. - * - * @throws Exception - */ - @Test - public void testDownloadFailedProxy() throws Exception { - URL clu = getClass().getResource("data/truffleruby2.jar"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - - ChunkedConnection directConnect = new ChunkedConnection( - u, - clu.openConnection()) { - @Override - public void connect() throws IOException { - try { - Thread.sleep(2000); - } catch (InterruptedException ex) { - } - super.connect(); - } - - }; - - Handler.bind(u.toString(), directConnect); - Check check = new Check(); - check.verbose = false; - delegateFeedback(check); - FileDownloader dn = new FileDownloader("test", - u, this); - dn.setVerbose(true); - dn.setDisplayProgress(true); - - ProxyConnectionFactory pcf = new ProxyConnectionFactory(this, u); - dn.setConnectionFactory(pcf); - - pcf.envHttpProxy = "http://localhost:11111"; - pcf.envHttpsProxy = "http://localhost:11111"; - - synchronized (directConnect) { - directConnect.nextChunk = 130 * 1024; - directConnect.readException = new FileNotFoundException(); - } - - exception.expect(FileNotFoundException.class); - dn.download(); - } - - /** - * Checks that a proxy connection which results in HTTP 500 will not override delayed direct - * connection. - * - * @throws Exception - */ - @Test - public void testDownloadProxy500() throws Exception { - URL clu = getClass().getResource("data/truffleruby2.jar"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - - ChunkedConnection directConnect = new ChunkedConnection( - u, - clu.openConnection()) { - @Override - public void connect() throws IOException { - try { - Thread.sleep(2000); - } catch (InterruptedException ex) { - } - super.connect(); - } - }; - - HttpURLConnection proxyCon = new HttpURLConnection(u) { - @Override - public void disconnect() { - } - - @Override - public boolean usingProxy() { - return true; - } - - @Override - public void connect() throws IOException { - responseCode = 500; - } - }; - - Handler.bind(u.toString(), directConnect); - Handler.bindProxy(u.toString(), proxyCon); - Check check = new Check(); - check.verbose = false; - delegateFeedback(check); - FileDownloader dn = new FileDownloader("test", - u, this); - dn.setVerbose(true); - dn.setDisplayProgress(true); - - ProxyConnectionFactory pcf = new ProxyConnectionFactory(this, u); - dn.setConnectionFactory(pcf); - - pcf.envHttpProxy = "http://localhost:11111"; - pcf.envHttpsProxy = "http://localhost:11111"; - - dn.download(); - } - - @Test - public void testDownloadFailure() throws Exception { - URL clu = getClass().getResource("data/truffleruby2.jar"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - - ChunkedConnection conn = new ChunkedConnection( - u, - clu.openConnection()); - Handler.bind(u.toString(), conn); - Check check = new Check(); - check.verbose = false; - delegateFeedback(check); - FileDownloader dn = new FileDownloader("test", - u, this); - dn.setVerbose(true); - dn.setDisplayProgress(true); - synchronized (conn) { - conn.nextChunk = 130 * 1024; - - ProxyConnectionFactory pcf = new ProxyConnectionFactory(this, u); - dn.setConnectionFactory(pcf); - - pcf.envHttpProxy = null; - pcf.envHttpsProxy = null; - } - - AtomicReference exc = new AtomicReference<>(); - Thread t = new Thread() { - @Override - public void run() { - try { - dn.download(); - } catch (Throwable x) { - exc.set(x); - } - } - }; - - t.start(); - - assertTrue(conn.reachedSem.tryAcquire(2, TimeUnit.SECONDS)); - // conn.reachedSem.acquire(); - conn.readException = new SocketException(); - conn.nextSem.release(); - t.join(1000); - // t.join(); - assertFalse(t.isAlive()); - assertTrue(exc.get() instanceof IOException); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/GraalEditionListTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/GraalEditionListTest.java deleted file mode 100644 index 53c8dc2d5534..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/GraalEditionListTest.java +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.Properties; -import org.graalvm.component.installer.CommandTestBase; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.model.GraalEdition; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class GraalEditionListTest extends CommandTestBase { - - private void loadReleaseFile(String name) throws IOException { - try (InputStream stm = getClass().getResourceAsStream("data/" + name)) { - Properties props = new Properties(); - props.load(stm); - props.stringPropertyNames().forEach((s) -> { - this.storage.graalInfo.put(s, props.getProperty(s)); - }); - } - } - - /** - * Checks that GraalVM 20.x style single property is parsed properly. Multiple SoftwareChannel - * Sources should be created, but just one Edition, the default one. - * - * @throws Exception - */ - @Test - public void testParseRelease20CatalogProperty() throws Exception { - loadReleaseFile("release20ce.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ce"); - - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - list.setDefaultCatalogSpec(storage.graalInfo.get(CommonConstants.RELEASE_CATALOG_KEY)); - List eds = list.editions(); - assertFalse(eds.isEmpty()); - assertEquals(1, eds.size()); - GraalEdition ge = eds.get(0); - - assertSame(list.getDefaultEdition(), ge); - assertEquals("Expected ce edition", "ce", ge.getId()); - assertEquals("Label from graal caps should be capitalized", "CE", ge.getDisplayName()); - } - - @Test - public void testParseRelease20EEWithLabel() throws Exception { - // this one contains multiple - loadReleaseFile("release20ee.properties"); - // substitute "ee", since that's what the DirectoryStorage does in presence of - // 'vm-enterprise' now: - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ee"); - - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - list.setDefaultCatalogSpec(storage.graalInfo.get(CommonConstants.RELEASE_CATALOG_KEY)); - List eds = list.editions(); - assertFalse(eds.isEmpty()); - assertEquals(1, eds.size()); - - GraalEdition ge = eds.get(0); - assertSame(list.getDefaultEdition(), ge); - assertEquals("Expected ee for vm-enterprise", "ee", ge.getId()); - assertEquals("Unqualified label should be picked up", "Enterprise Edition", ge.getDisplayName()); - - List sources = ge.getSoftwareSources(); - assertEquals("Multiple software sources must be read", 3, sources.size()); - assertEquals("Expected decreasing priority", 2, sources.get(1).getPriority()); - } - - /** - * Checks multi-property definition parsing from the release file. The default property may be - * present, but will be ignored. - * - * @throws Exception - */ - @Test - public void testParseRelease20MultiCatalogDefs() throws Exception { - // this one contains multiple - loadReleaseFile("release20ceWithEE.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ce"); - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - list.setDefaultCatalogSpec(storage.graalInfo.get(CommonConstants.RELEASE_CATALOG_KEY)); - List eds = list.editions(); - assertFalse(eds.isEmpty()); - assertEquals(2, eds.size()); - - GraalEdition ge = eds.get(0); - assertSame(list.getDefaultEdition(), ge); - assertEquals("Expected ce edition to be the default/installed", "ce", ge.getId()); - assertEquals("Label from graal caps should be capitalized", "CE", ge.getDisplayName()); - - List sources = ge.getSoftwareSources(); - assertEquals("CE edition has single source", 1, sources.size()); - - ge = eds.get(1); - assertEquals("Enterprise Edition must be present", "ee", ge.getId()); - assertEquals("Enterprise label should be parsed out", "Enterprise Edition", ge.getDisplayName()); - sources = ge.getSoftwareSources(); - assertEquals("EE has more sources", 2, sources.size()); - assertEquals("Expected decreasing priority", 2, sources.get(1).getPriority()); - - assertSame(ge, list.getEdition("ee")); - } - - /** - * Check function of the 'override' switch: the catalog software sources from Graal-20 release - * file should be ignored. - * - * @throws Exception - */ - @Test - public void testCheckUserUserOverride20() throws Exception { - // this one contains multiple - loadReleaseFile("release20ceWithEE.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ce"); - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - list.setDefaultCatalogSpec(storage.graalInfo.get(CommonConstants.RELEASE_CATALOG_KEY)); - list.setOverrideCatalogSpec("http://somewhere/catalog.properties|http://somewhereElse/catalog.properties"); - - List eds = list.editions(); - assertEquals(1, eds.size()); - GraalEdition ge = eds.get(0); - assertEquals("Expected default edition", "ce", ge.getId()); - List sources = ge.getSoftwareSources(); - assertEquals("Expected 2 sources from override", 2, sources.size()); - assertTrue(sources.stream().allMatch(s -> s.getLocationURL().contains("somewhere"))); - assertEquals(2, sources.get(1).getPriority()); - } - - @Test - public void testCheck21MultipleProperties() throws Exception { - loadReleaseFile("release21ce.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ce"); - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - list.setDefaultCatalogSpec(storage.graalInfo.get(CommonConstants.RELEASE_CATALOG_KEY)); - - List eds = list.editions(); - assertEquals(1, eds.size()); - GraalEdition ge = eds.get(0); - List sources = ge.getSoftwareSources(); - assertEquals("Expected default edition", "ce", ge.getId()); - assertEquals("Expected 2 sources from multiproperties", 2, sources.size()); - - } - - @Test - public void testCheck21MultipleEditions() throws Exception { - loadReleaseFile("release21ceWithEE.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ce"); - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - list.setDefaultCatalogSpec(storage.graalInfo.get(CommonConstants.RELEASE_CATALOG_KEY)); - - List eds = list.editions(); - assertEquals(2, eds.size()); - assertSame(list.getDefaultEdition(), eds.get(0)); - assertSame(list.getDefaultEdition(), list.getEdition("")); - - GraalEdition ge = list.getEdition("ce"); - assertSame(list.getDefaultEdition(), ge); - assertSame(list.getEdition(""), ge); - assertFalse("CE".equalsIgnoreCase(ge.getDisplayName())); - - List sources = ge.getSoftwareSources(); - assertEquals(2, sources.size()); - assertNotNull(sources.get(0).getLabel()); - assertTrue(sources.get(0).getLabel().contains("CE 8")); - assertNotNull(sources.get(1).getLabel()); - assertTrue(sources.get(1).getLabel().contains("CE 11")); - - // check lowercasing - ge = list.getEdition("eE"); - sources = ge.getSoftwareSources(); - assertEquals(3, sources.size()); - assertFalse("EE".equalsIgnoreCase(ge.getDisplayName())); - - String u = sources.get(0).getLocationURL(); - assertTrue(u.startsWith("gds:")); - assertTrue(sources.get(0).getLabel().contains("GDS")); - - u = sources.get(1).getLocationURL(); - assertTrue(u.contains("java8.properties")); - assertTrue(sources.get(1).getLabel().contains("Github")); - assertEquals("valueY", sources.get(1).getParameter("paramx")); - - u = sources.get(2).getLocationURL(); - assertTrue(u.contains("ee-extras")); - assertTrue(sources.get(2).getLabel().contains("experimental")); - } - - /** - * Check function of the 'override' switch: the catalog software sources from release file - * should be ignored. This test checks function for multiple-property definition, even in the - * presence of single-property definition which should be ignored. - * - * @throws Exception - */ - @Test - public void testCheckUserUserOverride21() throws Exception { - loadReleaseFile("release21ce.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ce"); - checkOverrideCommon(); - } - - private void checkOverrideCommon() throws Exception { - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - list.setOverrideCatalogSpec("https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8x.properties"); - - List eds = list.editions(); - assertEquals(1, eds.size()); - assertEquals(list.getDefaultEdition(), eds.get(0)); - - GraalEdition ge = eds.get(0); - assertEquals("ce", ge.getId()); - assertSame(ge, list.getEdition(null)); - - List channels = ge.getSoftwareSources(); - assertEquals(1, channels.size()); - assertTrue(channels.get(0).getLocationURL().endsWith("java8x.properties")); - } - - /** - * Checks that explicit URL (commandline) will override multi-edition setup. This must set up - * the default edition to the set of software channes from the explicit URL. - * - * @throws Exception - */ - @Test - public void testOverrideOneOverMultipleEditions() throws Exception { - loadReleaseFile("release21ceWithEE.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ce"); - checkOverrideCommon(); - } - - @Test - public void testEmptyReleaseInitializesOK() throws Exception { - loadReleaseFile("emptyRelease.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ee"); - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - - GraalEdition ge = list.getDefaultEdition(); - assertNotNull(ge); - assertEquals("ee", ge.getId()); - assertEquals(0, ge.getSoftwareSources().size()); - } - - /** - * Checks that exception is thrown when accessing undefined edition. - */ - @Test - public void testNonExistentEditionFails() throws Exception { - loadReleaseFile("release21ceWithEE.properties"); - storage.graalInfo.put(CommonConstants.CAP_EDITION, "ce"); - GraalEditionList list = new GraalEditionList(this, this, getLocalRegistry()); - - assertNotNull(list.getEdition("ee")); - assertNotNull(list.getEdition("ce")); - try { - assertNull(list.getEdition("fake")); - fail("Expected exception"); - } catch (FailedOperationException ex) { - // expected - } - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/ProxyConnectionFactoryTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/ProxyConnectionFactoryTest.java deleted file mode 100644 index 472de647b7af..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/ProxyConnectionFactoryTest.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.net.InetSocketAddress; -import java.net.URL; -import java.util.List; - -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.persist.ProxyResource; -import org.graalvm.component.installer.remote.ProxyConnectionFactory.Connector; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; - -/** - * - * @author sdedic - */ -public class ProxyConnectionFactoryTest extends TestBase { - - @Rule public ProxyResource proxyResource = new ProxyResource(); - - private static final String RESOURCE_URL = "test://remote-resource"; - private static final String HTTP_PROXY_ADDRESS = "http://proxy:80"; - - private ProxyConnectionFactory instance; - - @Before - public void setUp() throws Exception { - URL u = SystemUtils.toURL(RESOURCE_URL); - instance = new ProxyConnectionFactory(this, u); - // override proxies which may be loaded from testsuite environment: - instance.setProxy(true, null); - instance.setProxy(false, null); - } - - /** - * If no proxy is set, just direct connector is used. - */ - @Test - public void testNoProxy() throws Exception { - List cons = instance.makeConnectors(null, null); - assertEquals(1, cons.size()); - Connector c = cons.get(0); - assertTrue(c.isDirect()); - } - - private static void assertDirectConnector(List lst) { - assertTrue(lst.stream().filter(c -> c.isDirect()).findFirst().isPresent()); - } - - private static Connector findConnector(List lst, String proxyHost) { - for (Connector c : lst) { - InetSocketAddress a = c.getProxyAddress(); - if (a != null && proxyHost.equals(a.getHostName())) { - return c; - } - } - return null; - } - - @Test - public void testHttpProxy() throws Exception { - List cons = instance.makeConnectors(HTTP_PROXY_ADDRESS, null); - assertEquals(2, cons.size()); - assertDirectConnector(cons); - assertNotNull(findConnector(cons, "proxy")); - } - - @Test - public void testHttpsProxy() throws Exception { - List cons = instance.makeConnectors(null, HTTP_PROXY_ADDRESS); - assertEquals(2, cons.size()); - assertDirectConnector(cons); - assertNotNull(findConnector(cons, "proxy")); - } - - @Test - public void testBothProxiesSame() throws Exception { - List cons = instance.makeConnectors(HTTP_PROXY_ADDRESS, HTTP_PROXY_ADDRESS); - assertEquals(2, cons.size()); - assertDirectConnector(cons); - assertNotNull(findConnector(cons, "proxy")); - } - - @Test - public void testHttpAndHttpsDifferent() throws Exception { - List cons = instance.makeConnectors(HTTP_PROXY_ADDRESS, "http://securerproxy:1111"); - assertEquals(3, cons.size()); - assertDirectConnector(cons); - assertNotNull(findConnector(cons, "proxy")); - assertNotNull(findConnector(cons, "securerproxy")); - } - - @Test - public void testNamedProxyWithSpace() throws Exception { - List cons = instance.makeConnectors(" proxy:80", null); - assertEquals(2, cons.size()); - assertDirectConnector(cons); - - Connector c = findConnector(cons, "proxy"); - assertNotNull(c); - assertEquals(80, c.getProxyAddress().getPort()); - } - - String errorMessage; - - @Test - public void testMalformedProxy() throws Exception { - class F extends FeedbackAdapter { - - @Override - public void error(String key, Throwable t, Object... params) { - super.error(key, t, params); - errorMessage = key; - } - } - F f = new F(); - delegateFeedback(f); - List cons = instance.makeConnectors(":proxy:80", null); - assertEquals(1, cons.size()); - assertDirectConnector(cons); - - // check that warning about illegal proxy was printed - assertTrue(errorMessage.startsWith("WARN_")); - } - - @Test - public void testNumericWithProtocol() throws Exception { - List cons = instance.makeConnectors("http://127.0.0.2:1080", null); - assertEquals(2, cons.size()); - assertDirectConnector(cons); - - Connector c = findConnector(cons, "127.0.0.2"); - assertNotNull(c); - assertEquals(1080, c.getProxyAddress().getPort()); - } - - @Test - public void testNumericNoProtocol() throws Exception { - List cons = instance.makeConnectors("127.0.0.2:1080", null); - assertEquals(2, cons.size()); - assertDirectConnector(cons); - - Connector c = findConnector(cons, "127.0.0.2"); - assertNotNull(c); - assertEquals(1080, c.getProxyAddress().getPort()); - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/RemoteCatalogDownloaderTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/RemoteCatalogDownloaderTest.java deleted file mode 100644 index 771dcc348120..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/RemoteCatalogDownloaderTest.java +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.IOException; -import java.net.ConnectException; -import java.net.URL; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Set; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.IncompatibleException; -import org.graalvm.component.installer.MockURLConnection; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.persist.NetworkTestBase; -import org.graalvm.component.installer.persist.test.Handler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; -import org.junit.Test; - -public class RemoteCatalogDownloaderTest extends NetworkTestBase { - - ComponentCatalog openCatalog(SoftwareChannel ch) throws IOException { - return openCatalog(ch, getLocalRegistry().getGraalVersion()); - } - - ComponentCatalog openCatalog(SoftwareChannel ch, Version v) throws IOException { - ComponentCatalog cc = new CatalogContents(this, ch.getStorage(), getLocalRegistry(), v); - cc.getComponentIDs(); - return cc; - } - - @Test - public void testDownloadCatalogBadGraalVersion() throws Exception { - URL clu = getClass().getResource("catalog.properties"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - Handler.bind(u.toString(), - clu); - - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, u); - exception.expect(IncompatibleException.class); - exception.expectMessage("REMOTE_UnsupportedGraalVersion"); - openCatalog(d); - } - - @Test - public void testDownloadCatalogCorrupted() throws Exception { - URL clu = getClass().getResource("catalogCorrupted.properties"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - Handler.bind(u.toString(), - clu); - - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, u); - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_CorruptedCatalogFile"); - openCatalog(d); - } - - private void loadRegistry() throws Exception { - URL clu = getClass().getResource("catalog.properties"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - Handler.bind(u.toString(), - clu); - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.33-dev"); - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, u); - registry = openCatalog(d); - } - - @Test - public void testDownloadCatalogGood() throws Exception { - loadRegistry(); - assertNotNull(registry); - } - - @Test - public void testRemoteComponents() throws Exception { - loadRegistry(); - assertEquals(2, registry.getComponentIDs().size()); - - assertNotNull(registry.findComponent("r")); - assertNotNull(registry.findComponent("ruby")); - } - - @Test - public void testDownloadCorruptedCatalog() throws Exception { - URL clu = getClass().getResource("catalogCorrupted.properties"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - Handler.bind(u.toString(), - clu); - - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, u); - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_CorruptedCatalogFile"); - openCatalog(d); - } - - @Test - public void testCannotConnectCatalog() throws Exception { - URL clu = getClass().getResource("catalogCorrupted.properties"); - URL u = SystemUtils.toURL("test://graalvm.io/download/truffleruby.zip"); - Handler.bind(u.toString(), - new MockURLConnection(clu.openConnection(), u, new ConnectException())); - - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, u); - exception.expect(FailedOperationException.class); - exception.expectMessage("REMOTE_ErrorDownloadCatalogProxy"); - openCatalog(d); - } - - RemoteCatalogDownloader rcd; - - private void setupJoinedCatalog(String firstPart) throws IOException { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0.0"); - URL u1 = SystemUtils.toURL("test://graalvm.io/catalog1.properties"); - URL u2 = SystemUtils.toURL("test://graalvm.io/catalog2.properties"); - - URL clu1 = getClass().getResource(firstPart); - URL clu2 = getClass().getResource("catalogMultiPart2.properties"); - - Handler.bind(u1.toString(), clu1); - Handler.bind(u2.toString(), clu2); - - String list = String.join("|", u1.toString(), u2.toString()); - - rcd = new RemoteCatalogDownloader(this, this, list); - } - - private static ComponentInfo findComponent(ComponentCollection col, String id) { - Collection infos = col.loadComponents(id, Version.NO_VERSION.match(Version.Match.Type.GREATER), false); - return infos == null || infos.isEmpty() ? null : infos.iterator().next(); - } - - /** - * Checks that if a single catalog does not correspond to graalvm version, other catalogs will - * be read. - * - * @throws Exception - */ - @Test - public void testSingleNonMatchingCatalogIgnored() throws Exception { - setupJoinedCatalog("catalogMultiPart1.properties"); - ComponentCatalog col = openCatalog(rcd); - - // need to incorporate requirements, too... they are tested in CatalogIterable - CatalogIterable catIt = new CatalogIterable(this, this); - catIt.setRemoteRegistry(col); - - textParams.add("r"); - textParams.add("ruby"); - textParams.add("python"); - - Iterator iter = catIt.iterator(); - - ComponentParam p = iter.next(); - ComponentInfo info; - - assertNotNull(p); - info = p.createMetaLoader().getComponentInfo(); - assertEquals("1.0.0.0", info.getVersion().toString()); - - p = iter.next(); - assertNotNull(p); - info = p.createMetaLoader().getComponentInfo(); - assertEquals("1.0.0.0", info.getVersion().toString()); - - // python cannot be found, an exception expected - assertTrue(iter.hasNext()); - try { - p = iter.next(); - fail("No python for 1.0.0"); - } catch (FailedOperationException ex) { - - } - } - - /** - * Checks that multiple catalogs are merged together. - */ - @Test - public void testMultipleCatalogsJoined() throws Exception { - setupJoinedCatalog("catalogMultiPart1Mergeable.properties"); - ComponentCollection col = openCatalog(rcd); - assertNotNull(findComponent(col, "r")); - assertNotNull(findComponent(col, "ruby")); - assertNotNull(findComponent(col, "python")); - } - - /** - * Checks that simple explicit URL given 'the old way' will define a catalog that will be - * loaded. - * - * @throws Exception - */ - @Test - public void testParseCatalogOverride() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.33-dev"); - String single = "test://graalv.org/test/catalog.properties"; - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, single); - List sources = d.getChannelSources(); - assertNotNull(sources); - assertEquals(1, sources.size()); - assertEquals(single, sources.get(0).getLocationURL()); - - URL clu1 = getClass().getResource("catalogMultiVersions.properties"); - - Handler.bind(single, clu1); - - ComponentStorage store = d.getStorage(); - Set ids = store.listComponentIDs(); - assertTrue(ids.contains("ruby")); - assertTrue(Handler.isVisited(SystemUtils.toURL(single))); - } - - @Test - public void testParseCatalogOverrideParameters() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.33-dev"); - String url = "test://graalv.org/test/catalog.properties"; - String single = url + "?linux=a&macOS=a+b&windows="; - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, single); - List sources = d.getChannelSources(); - assertNotNull(sources); - assertEquals(1, sources.size()); - - SoftwareChannelSource src = sources.get(0); - assertEquals(url, src.getLocationURL()); - - assertEquals("a", src.getParameter("linux")); - assertEquals("a b", src.getParameter("macOS")); - assertEquals("", src.getParameter("windows")); - } - - private static final String FIRST_CATALOG_URL = "test://graalv.org/test/catalog.properties"; - private static final String SECOND_CATALOG_URL = "test://graalv.org/test/catalog.2.properties"; - - private void checkMultipleCatalogResults(RemoteCatalogDownloader d) throws Exception { - URL clu1 = getClass().getResource("catalogMultiPart1.properties"); - Handler.bind(FIRST_CATALOG_URL, clu1); - - URL clu2 = getClass().getResource("catalogMultiPart3.properties"); - Handler.bind(SECOND_CATALOG_URL, clu2); - - ComponentStorage store = d.getStorage(); - Set ids = store.listComponentIDs(); - - assertTrue(ids.contains("ruby")); - assertTrue(ids.contains("r")); - } - - /** - * Checks that multiple URLs given 'the old way' will define a catalog that will be loaded. - * Checks that parameters of the URL will be initialized. - * - * @throws Exception - */ - @Test - public void testParseMultipleCatalogOverride() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.1.0"); - - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, String.join("|", FIRST_CATALOG_URL, SECOND_CATALOG_URL)); - checkMultipleCatalogResults(d); - } - - /** - * Checks that multiple catalogs defined in the release file are merged together and contain - * correct metadata. - * - * @throws Exception - */ - @Test - public void testParseNewReleaseCatalogMulti() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.1.0"); - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "1_url", "test://graalv.org/test/catalog.properties"); - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "1_label", "First part"); - - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "3_url", "test://graalv.org/test/catalog.2.properties"); - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "3_label", "Second part"); - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "3_linux", "a"); - - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, (String) null); - checkMultipleCatalogResults(d); - - List sources = d.getChannelSources(); - assertEquals(2, sources.size()); - assertEquals("First part", sources.get(0).getLabel()); - assertEquals("a", sources.get(1).getParameter("linux")); - } - - /** - * Checks that catalog entries in environment win over release file ones. - * - * @throws Exception - */ - @Test - public void testEnvironmentMultiCatalogWins() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.1.0"); - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "1_url", "test://graalv.org/test/catalog.properties"); - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "1_label", "First part"); - - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "3_url", "test://graalv.org/test/catalog.2.properties"); - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "3_label", "Second part"); - storage.graalInfo.put(CommonConstants.CAP_CATALOG_PREFIX + "3_linux", "a"); - - RemoteCatalogDownloader d = new RemoteCatalogDownloader(this, this, (String) null); - - // override with env variables catalog entries: - envParameters.put("GRAALVM_COMPONENT_CATALOG_1_URL", "test://graalv.org/test/envcatalog.properties"); - envParameters.put("GRAALVM_COMPONENT_CATALOG_1_LABEL", "First env"); - - List sources = d.readChannelSources(); - assertEquals(1, sources.size()); - assertTrue(sources.get(0).getLocationURL().endsWith("envcatalog.properties")); - } - - public static List callReadChannelSources(RemoteCatalogDownloader d) { - return d.readChannelSources(); - } -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/RemoteStorageTest.java b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/RemoteStorageTest.java deleted file mode 100644 index 6a733436ef28..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/RemoteStorageTest.java +++ /dev/null @@ -1,344 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Properties; -import java.util.Set; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.MetadataException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.TestBase; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.commands.MockStorage; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; - -public class RemoteStorageTest extends TestBase { - private static final String TEST_GRAAL_FLAVOUR = "linux_amd64"; - private static final String TEST_BASE_URL_DIR = "https://graalvm.io/"; - private static final String TEST_BASE_URL = TEST_BASE_URL_DIR + "download/catalog"; - private RemotePropertiesStorage remStorage; - private MockStorage storage; - private ComponentRegistry localRegistry; - private Properties catalogProps = new Properties(); - - private String graalVersion = "0.33-dev"; - private String graalSelector = TEST_GRAAL_FLAVOUR; - - @Rule public ExpectedException exception = ExpectedException.none(); - - @Before - public void setUp() throws Exception { - storage = new MockStorage(); - remStorage = new RemotePropertiesStorage(this, localRegistry, catalogProps, graalSelector, - Version.fromString(graalVersion), SystemUtils.toURL(TEST_BASE_URL)); - try (InputStream is = getClass().getResourceAsStream("catalog.properties")) { - catalogProps.load(is); - } - } - - private void loadCatalog(String s) throws IOException { - catalogProps.clear(); - localRegistry = new ComponentRegistry(this, storage); - try (InputStream is = getClass().getResourceAsStream(s)) { - catalogProps.load(is); - } - } - - private void forceLoadCatalog(String s) throws IOException { - loadCatalog(s); - remStorage = new RemotePropertiesStorage(this, localRegistry, catalogProps, graalSelector, - Version.fromString(graalVersion), SystemUtils.toURL(TEST_BASE_URL)); - } - - @Test - public void testListIDs() throws Exception { - Set ids = remStorage.listComponentIDs(); - - List l = new ArrayList<>(ids); - Collections.sort(l); - - assertEquals(Arrays.asList("r", "ruby"), l); - } - - private ComponentInfo loadLastComponent(String id) throws IOException { - Set infos = remStorage.loadComponentMetadata(id); - if (infos == null || infos.isEmpty()) { - return null; - } - List sorted = new ArrayList<>(infos); - Collections.sort(sorted, ComponentInfo.versionComparator()); - return sorted.get(sorted.size() - 1); - } - - @Test - public void testLoadMetadata() throws Exception { - ComponentInfo rInfo = loadLastComponent("r"); - assertEquals("FastR 0.33-dev", rInfo.getName()); - assertEquals("R", rInfo.getId()); - } - - @Test - public void testRelativeRemoteURL() throws Exception { - ComponentInfo rInfo = loadLastComponent("r"); - assertEquals(SystemUtils.toURL(TEST_BASE_URL_DIR + "0.33-dev/graalvm-fastr.zip"), rInfo.getRemoteURL()); - } - - @Test - public void testInvalidRemoteURL() throws Exception { - loadCatalog("catalog.bad1.properties"); - // load good compoennt: - ComponentInfo rInfo = loadLastComponent("ruby"); - assertEquals("ruby", rInfo.getId()); - - // and now bad component - exception.expect(MalformedURLException.class); - rInfo = loadLastComponent("r"); - } - - @Test - public void testLoadMetadataMalformed() throws Exception { - loadCatalog("catalog.bad2.properties"); - // load good compoennt: - ComponentInfo rInfo = loadLastComponent("r"); - assertEquals("R", rInfo.getId()); - - // and now bad component - exception.expect(MetadataException.class); - exception.expectMessage("ERROR_InvalidVersion"); - rInfo = loadLastComponent("ruby"); - } - - static byte[] truffleruby2Hash = { - (byte) 0xae, - (byte) 0xd6, - 0x7c, - 0x4d, - 0x3c, - 0x04, - 0x01, - 0x15, - 0x13, - (byte) 0xf8, - (byte) 0x94, - 0x0b, - (byte) 0xf6, - (byte) 0xe6, - (byte) 0xea, - 0x22, - 0x5d, - 0x34, - 0x5c, - 0x27, - (byte) 0xa1, - (byte) 0xa3, - (byte) 0xcd, - (byte) 0xe4, - (byte) 0xdd, - 0x0c, - 0x46, - 0x36, - 0x45, - 0x3f, - 0x42, - (byte) 0xba - }; - - static String truffleruby2HashString = "aed67c4d3c04011513f8940bf6e6ea225d345c27a1a3cde4dd0c4636453f42ba"; - static String truffleruby2HashString2 = "ae:d6:7c:4d:3c:04:01:15:13:f8:94:0b:f6:e6:ea:22:5d:34:5c:27:a1:a3:cd:e4:dd:0c:46:36:45:3f:42:ba"; - - @Test - public void testHashString() throws Exception { - byte[] bytes = SystemUtils.toHashBytes(truffleruby2HashString); - assertArrayEquals(truffleruby2Hash, bytes); - } - - @Test - public void testHashStringDivided() throws Exception { - byte[] bytes = SystemUtils.toHashBytes(truffleruby2HashString2); - assertArrayEquals(truffleruby2Hash, bytes); - } - - /** - * Checks that multi-version properties load without error. - */ - @Test - public void loadMultipleVersions() throws Exception { - loadCatalog("catalogMultiVersions.properties"); - Set ids = remStorage.listComponentIDs(); - assertEquals(3, ids.size()); - assertTrue(ids.contains("python")); - } - - /** - * Checks that versions prior the graalvm version are not included. - */ - @Test - public void obsoleteVersionsNotIncluded() throws Exception { - loadCatalog("catalogMultiVersions.properties"); - remStorage = new RemotePropertiesStorage(this, localRegistry, catalogProps, TEST_GRAAL_FLAVOUR, - Version.fromString("1.0.0.0"), SystemUtils.toURL(TEST_BASE_URL)); - Set rubies = remStorage.loadComponentMetadata("ruby"); - // 1.0.0.0 and 1.0.1.0 versions - assertEquals(2, rubies.size()); - - Set rs = remStorage.loadComponentMetadata("r"); - assertEquals(1, rs.size()); - - Set pythons = remStorage.loadComponentMetadata("python"); - assertEquals(1, pythons.size()); - } - - @Test - public void checkMultipleGraalVMDependencies() throws Exception { - loadCatalog("catalogMultiVersions.properties"); - - Set rubies = remStorage.loadComponentMetadata("ruby"); - Set versions = new HashSet<>(); - for (ComponentInfo ci : rubies) { - Version compVersion = ci.getVersion(); - assertTrue(versions.add(compVersion)); - - String gv = ci.getRequiredGraalValues().get(BundleConstants.GRAAL_VERSION); - assertEquals(gv, compVersion.toString()); - } - } - - @Test - public void loadMultipleComponentFlavours() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "1.0.0.0"); - loadCatalog("catalogMultiFlavours.properties"); - Set ids = remStorage.listComponentIDs(); - assertEquals(3, ids.size()); - assertTrue(ids.contains("python")); - List infos = new ArrayList<>(remStorage.loadComponentMetadata("ruby")); - assertEquals(4, infos.size()); - - Collections.sort(infos, (a, b) -> compare( - a.getRequiredGraalValues().get(CommonConstants.CAP_JAVA_VERSION), - b.getRequiredGraalValues().get(CommonConstants.CAP_JAVA_VERSION))); - ComponentInfo ci; - - ci = infos.get(2); - assertEquals("ruby", ci.getId()); - assertEquals("11", ci.getRequiredGraalValues().get(CommonConstants.CAP_JAVA_VERSION)); - - ci = infos.get(3); - assertEquals("ruby", ci.getId()); - assertEquals("8", ci.getRequiredGraalValues().get(CommonConstants.CAP_JAVA_VERSION)); - - } - - private void setSelector(String os, String variant, String arch) { - String s = SystemUtils.patternOsName(os, variant) + "_" + SystemUtils.patternOsArch(arch); - graalSelector = s; - } - - private void assertComponentHasNormalizedValues(String cid) throws IOException { - Set infos = remStorage.loadComponentMetadata(cid); - assertEquals(1, infos.size()); - ComponentInfo ci = infos.iterator().next(); - - String os = ci.getRequiredGraalValues().get(CommonConstants.CAP_OS_NAME); - String arch = ci.getRequiredGraalValues().get(CommonConstants.CAP_OS_ARCH); - - String nos = SystemUtils.normalizeOSName(os, arch); - String narch = SystemUtils.normalizeArchitecture(os, arch); - - assertEquals(nos, os); - assertEquals(narch, arch); - } - - private void assertAllComponentsLoaded() throws IOException { - Set ids = remStorage.listComponentIDs(); - assertEquals(2, ids.size()); - assertTrue(ids.contains("ruby")); - assertTrue(ids.contains("r")); - - // assertComponentHasNormalizedValues("ruby"); - assertComponentHasNormalizedValues("r"); - } - - @Test - public void testMixedLinuxArchitetures() throws Exception { - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.33-dev"); - // selector is opposite to what's in the catalog file. - setSelector("linux", null, "x86_64"); - forceLoadCatalog("catalogWithDifferentOsArch.properties"); - assertAllComponentsLoaded(); - - setSelector("linux", "musl", "x86_64"); - forceLoadCatalog("catalogWithDifferentOsArch.properties"); - assertAllComponentsLoaded(); - - graalVersion = "0.34-dev"; - setSelector("Linux", null, "amd64"); - forceLoadCatalog("catalogWithDifferentOsArch.properties"); - assertAllComponentsLoaded(); - - setSelector("Linux", "musl", "amd64"); - forceLoadCatalog("catalogWithDifferentOsArch.properties"); - assertAllComponentsLoaded(); - - graalVersion = "0.35-dev"; - setSelector("Darwin", null, "amd64"); - forceLoadCatalog("catalogWithDifferentOsArch.properties"); - assertAllComponentsLoaded(); - - storage.graalInfo.put(CommonConstants.CAP_GRAALVM_VERSION, "0.35-dev"); - setSelector("macos", null, "x86_64"); - forceLoadCatalog("catalogWithDifferentOsArch.properties"); - assertAllComponentsLoaded(); - } - - static int compare(String a, String b) { - if (a == b) { - return 0; - } - if (a == null) { - return -1; - } else if (b == null) { - return 1; - } - return a.compareTo(b); - } - -} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.bad1.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.bad1.properties deleted file mode 100644 index e28e368d5cb0..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.bad1.properties +++ /dev/null @@ -1,11 +0,0 @@ -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: foo://&graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.bad2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.bad2.properties deleted file mode 100644 index abc66b8d1a02..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.bad2.properties +++ /dev/null @@ -1,11 +0,0 @@ -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33##-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)/(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: ../0.33-dev/graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.properties deleted file mode 100644 index 588be2b81a80..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalog.properties +++ /dev/null @@ -1,12 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: ../0.33-dev/graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogCorrupted.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogCorrupted.properties deleted file mode 100644 index b7af51e27f82..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogCorrupted.properties +++ /dev/null @@ -1,12 +0,0 @@ -Component.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -Component.0.33-dev_linux_amd64.ruby: \uxxxx graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: ../0.33-dev/graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormat1.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormat1.properties deleted file mode 100644 index 20c841fae388..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormat1.properties +++ /dev/null @@ -1,91 +0,0 @@ -org.graalvm.1.0.0-rc15_linux_amd64=GraalVM 1.0.0-rc15 linux/amd64 -org.graalvm.1.0.0-rc15_macos_amd64=GraalVM 1.0.0-rc15 macos/amd64 - -Component.1.0.0-rc15_linux_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0-rc15/python-linux-amd64.jar -Component.1.0.0-rc15_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0-rc15_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc15)(os_name=linux)(os_arch=amd64))" -Component.1.0.0-rc15_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0-rc15_linux_amd64.org.graalvm.python-Bundle-Version=1.0.0-rc15 -Component.1.0.0-rc15_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0-rc15_macos_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0-rc15/python-macos-amd64.jar -Component.1.0.0-rc15_macos_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0-rc15_macos_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc15)(os_name=macos)(os_arch=amd64))" -Component.1.0.0-rc15_macos_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0-rc15_macos_amd64.org.graalvm.python-Bundle-Version=1.0.0-rc15 -Component.1.0.0-rc15_macos_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0-rc15_linux_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0-rc15/r-linux-amd64.jar -Component.1.0.0-rc15_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0-rc15_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc15)(os_name=linux)(os_arch=amd64))" -Component.1.0.0-rc15_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0-rc15_linux_amd64.org.graalvm.r-Bundle-Version=1.0.0-rc15 -Component.1.0.0-rc15_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0-rc15_macos_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0-rc15/r-macos-amd64.jar -Component.1.0.0-rc15_macos_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0-rc15_macos_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc15)(os_name=macos)(os_arch=amd64))" -Component.1.0.0-rc15_macos_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0-rc15_macos_amd64.org.graalvm.r-Bundle-Version=1.0.0-rc15 -Component.1.0.0-rc15_macos_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0-rc15_linux_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0-rc15/ruby-linux-amd64.jar -Component.1.0.0-rc15_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0-rc15_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc15)(os_name=linux)(os_arch=amd64))" -Component.1.0.0-rc15_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0-rc15_linux_amd64.org.graalvm.ruby-Bundle-Version=1.0.0-rc15 -Component.1.0.0-rc15_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -Component.1.0.0-rc15_macos_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0-rc15/ruby-macos-amd64.jar -Component.1.0.0-rc15_macos_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0-rc15_macos_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0-rc15)(os_name=macos)(os_arch=amd64))" -Component.1.0.0-rc15_macos_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0-rc15_macos_amd64.org.graalvm.ruby-Bundle-Version=1.0.0-rc15 -Component.1.0.0-rc15_macos_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - - -org.graalvm.1.0.0_linux_amd64=GraalVM 1.0.0 linux/amd64 -org.graalvm.1.0.0_macos_amd64=GraalVM 1.0.0 macos/amd64 - -Component.1.0.0_linux_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0/python-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0_macos_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0/python-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0_linux_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0/r-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0_macos_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0/r-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0_linux_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0/ruby-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -Component.1.0.0_macos_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0/ruby-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormat2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormat2.properties deleted file mode 100644 index 4f02f24face3..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormat2.properties +++ /dev/null @@ -1,90 +0,0 @@ -org.graalvm.1.0.0_linux_amd64=GraalVM 1.0.0 linux/amd64 -org.graalvm.1.0.0_macos_amd64=GraalVM 1.0.0 macos/amd64 - -Component.1.0.0_linux_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0/python-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0_macos_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0/python-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0_linux_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0/r-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0_macos_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0/r-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0_linux_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0/ruby-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -Component.1.0.0_macos_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0/ruby-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -org.graalvm.1.0.0_linux_amd64=GraalVM 1.0.0 linux/amd64 -org.graalvm.1.0.0_macos_amd64=GraalVM 1.0.0 macos/amd64 - -Component.1.0.0_linux_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0/python-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0_macos_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0/python-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0_linux_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0/r-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0_macos_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0/r-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0_linux_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0/ruby-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -Component.1.0.0_macos_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0/ruby-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormatMix.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormatMix.properties deleted file mode 100644 index db7fbdfa13e5..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogFormatMix.properties +++ /dev/null @@ -1,135 +0,0 @@ -org.graalvm.1.0.0_linux_amd64=GraalVM 1.0.0 linux/amd64 -org.graalvm.1.0.0_macos_amd64=GraalVM 1.0.0 macos/amd64 - -Component.1.0.0_linux_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0/python-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0_linux_amd64.org.graalvm.python-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0_macos_amd64.org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.0/python-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Name=Graal.Python -Component.1.0.0_macos_amd64.org.graalvm.python-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.1.0.0_linux_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0/r-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0_linux_amd64.org.graalvm.r-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0_macos_amd64.org.graalvm.r=https://acme.org/graalvm/fastr/1.0.0/r-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Name=FastR -Component.1.0.0_macos_amd64.org.graalvm.r-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.1.0.0_linux_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0/ruby-linux-amd64.jar -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=linux)(os_arch=amd64))" -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0_linux_amd64.org.graalvm.ruby-Bundle-Version=1.0.0 -Component.1.0.0_linux_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -Component.1.0.0_macos_amd64.org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.0/ruby-macos-amd64.jar -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0)(os_name=macos)(os_arch=amd64))" -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.1.0.0_macos_amd64.org.graalvm.ruby-Bundle-Version=1.0.0 -Component.1.0.0_macos_amd64.org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -org.graalvm.linux_amd64/1.0.1.0=GraalVM 1.0.1.0 linux/amd64 -org.graalvm.macos_amd64/1.0.1.0=GraalVM 1.0.1.0 macos/amd64 - -Component.linux_amd64/1.0.1.0/org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.1.0/python-linux-amd64.jar -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.macos_amd64/1.0.1.0/org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.1.0/python-macos-amd64.jar -Component.macos_amd64/1.0.1.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.macos_amd64/1.0.1.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=macos)(os_arch=amd64))" -Component.macos_amd64/1.0.1.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.macos_amd64/1.0.1.0/org.graalvm.python-Bundle-Version=1.0.1.0 -Component.macos_amd64/1.0.1.0/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.linux_amd64/1.0.1.0/org.graalvm.r=https://acme.org/graalvm/fastr/1.0.1.0/r-linux-amd64.jar -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.macos_amd64/1.0.1.0/org.graalvm.r=https://acme.org/graalvm/fastr/1.0.1.0/r-macos-amd64.jar -Component.macos_amd64/1.0.1.0/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.macos_amd64/1.0.1.0/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=macos)(os_arch=amd64))" -Component.macos_amd64/1.0.1.0/org.graalvm.r-Bundle-Name=FastR -Component.macos_amd64/1.0.1.0/org.graalvm.r-Bundle-Version=1.0.1.0 -Component.macos_amd64/1.0.1.0/org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.linux_amd64/1.0.1.0/org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.1.0/ruby-linux-amd64.jar -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -Component.macos_amd64/1.0.1.0/org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.1.0/ruby-macos-amd64.jar -Component.macos_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.macos_amd64/1.0.1.0/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=macos)(os_arch=amd64))" -Component.macos_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.macos_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Version=1.0.1.0 -Component.macos_amd64/1.0.1.0/org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -org.graalvm.linux_amd64/1.0.2.0-1=GraalVM 1.0.2.0-1 linux/amd64 -org.graalvm.macos_amd64/1.0.2.0-1=GraalVM 1.0.2.0-1 macos/amd64 - -Component.linux_amd64/1.0.2.0-1/org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.2.0-1/python-linux-amd64.jar -Component.linux_amd64/1.0.2.0-1/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.0.2.0-1/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.2.0-1)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.2.0-1/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.0.2.0-1/org.graalvm.python-Bundle-Version=1.0.2.0-1 -Component.linux_amd64/1.0.2.0-1/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.macos_amd64/1.0.2.0-1/org.graalvm.python=https://acme.org/graalvm/graalpython/1.0.2.0-1/python-macos-amd64.jar -Component.macos_amd64/1.0.2.0-1/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.macos_amd64/1.0.2.0-1/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.2.0-1)(os_name=macos)(os_arch=amd64))" -Component.macos_amd64/1.0.2.0-1/org.graalvm.python-Bundle-Name=Graal.Python -Component.macos_amd64/1.0.2.0-1/org.graalvm.python-Bundle-Version=1.0.2.0-1 -Component.macos_amd64/1.0.2.0-1/org.graalvm.python-x-GraalVM-Working-Directories=jre/languages/python - -Component.linux_amd64/1.0.2.0-1/org.graalvm.r=https://acme.org/graalvm/fastr/1.0.2.0-1/r-linux-amd64.jar -Component.linux_amd64/1.0.2.0-1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.0.2.0-1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.2.0-1)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.2.0-1/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.0.2.0-1/org.graalvm.r-Bundle-Version=1.0.2.0-1 -Component.linux_amd64/1.0.2.0-1/org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.macos_amd64/1.0.2.0-1/org.graalvm.r=https://acme.org/graalvm/fastr/1.0.2.0-1/r-macos-amd64.jar -Component.macos_amd64/1.0.2.0-1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.macos_amd64/1.0.2.0-1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.2.0-1)(os_name=macos)(os_arch=amd64))" -Component.macos_amd64/1.0.2.0-1/org.graalvm.r-Bundle-Name=FastR -Component.macos_amd64/1.0.2.0-1/org.graalvm.r-Bundle-Version=1.0.2.0-1 -Component.macos_amd64/1.0.2.0-1/org.graalvm.r-x-GraalVM-Working-Directories=jre/languages/R - -Component.linux_amd64/1.0.2.0-1/org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.2.0-1/ruby-linux-amd64.jar -Component.linux_amd64/1.0.2.0-1/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.2.0-1/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.2.0-1)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.2.0-1/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.2.0-1/org.graalvm.ruby-Bundle-Version=1.0.2.0-1 -Component.linux_amd64/1.0.2.0-1/org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - -Component.macos_amd64/1.0.2.0-1/org.graalvm.ruby=https://acme.org/graalvm/truffleruby/1.0.2.0-1/ruby-macos-amd64.jar -Component.macos_amd64/1.0.2.0-1/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.macos_amd64/1.0.2.0-1/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.2.0-1)(os_name=macos)(os_arch=amd64))" -Component.macos_amd64/1.0.2.0-1/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.macos_amd64/1.0.2.0-1/org.graalvm.ruby-Bundle-Version=1.0.2.0-1 -Component.macos_amd64/1.0.2.0-1/org.graalvm.ruby-x-GraalVM-Working-Directories=jre/languages/ruby - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiFlavours.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiFlavours.properties deleted file mode 100644 index 6d87be728ad4..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiFlavours.properties +++ /dev/null @@ -1,52 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: ../0.33-dev/graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - - -org.graalvm.linux_amd64/1.0.0.0: GraalVM 1.0 -Component.linux_amd64/1.0.0.0/cafebabe/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.0.0/cafebabe/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.0.0/cafebabe/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.0.0/cafebabe/ruby-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/cafebabe/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(java_version=8)(os_arch=amd64))" - -Component.linux_amd64/1.0.0.0/deadbeef/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.0.0/deadbeef/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.0.0/deadbeef/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.0.0/deadbeef/ruby-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/deadbeef/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(java_version=11)(os_arch=amd64))" - -Component.linux_amd64/1.0.0.0/cafebabe/r: ../1.0.0.0/graalvm-fastr.zip -Component.linux_amd64/1.0.0.0/cafebabe/r-Bundle-Name: FastR -Component.linux_amd64/1.0.0.0/cafebabe/r-Bundle-Symbolic-Name: R -Component.linux_amd64/1.0.0.0/cafebabe/r-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/cafebabe/r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - -org.graalvm.linux_amd64/1.0.1.0: GraalVM 1.0.1 -Component.linux_amd64/1.0.1.0/cafebabe/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.1.0/cafebabe/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/cafebabe/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.1.0/cafebabe/ruby-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/cafebabe/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - - -# Python is intentionally just for version 1.0.1.0 -Component.linux_amd64/1.0.1.0/cafebabe/python: graalvm-python.zip -Component.linux_amd64/1.0.1.0/cafebabe/python-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/cafebabe/python-Bundle-Symbolic-Name: python -Component.linux_amd64/1.0.1.0/cafebabe/python-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/cafebabe/python-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart1.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart1.properties deleted file mode 100644 index a44f2dde80a5..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart1.properties +++ /dev/null @@ -1,17 +0,0 @@ -org.graalvm.linux_amd64/1.0.1.0: GraalVM 1.0.1 -Component.linux_amd64/1.0.1.0/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.1.0/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.1.0/ruby-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - - -# Python is intentionally just for version 1.0.1.0 -Component.linux_amd64/1.0.1.0/python: graalvm-python.zip -Component.linux_amd64/1.0.1.0/python-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/python-Bundle-Symbolic-Name: python -Component.linux_amd64/1.0.1.0/python-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/python-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart1Mergeable.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart1Mergeable.properties deleted file mode 100644 index 7c6e10b0b652..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart1Mergeable.properties +++ /dev/null @@ -1,18 +0,0 @@ -org.graalvm.linux_amd64/1.0.0.0: GraalVM 1.0 -org.graalvm.linux_amd64/1.0.1.0: GraalVM 1.0.1 -Component.linux_amd64/1.0.1.0/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.1.0/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.1.0/ruby-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - - -# Python is intentionally just for version 1.0.1.0 -Component.linux_amd64/1.0.1.0/python: graalvm-python.zip -Component.linux_amd64/1.0.1.0/python-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/python-Bundle-Symbolic-Name: python -Component.linux_amd64/1.0.1.0/python-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/python-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart2.properties deleted file mode 100644 index 09d69d5d9799..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart2.properties +++ /dev/null @@ -1,13 +0,0 @@ -org.graalvm.linux_amd64/1.0.0.0: GraalVM 1.0 -Component.linux_amd64/1.0.0.0/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.0.0/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.0.0/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.0.0/ruby-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/r: ../1.0.0.0/graalvm-fastr.zip -Component.linux_amd64/1.0.0.0/r-Bundle-Name: FastR -Component.linux_amd64/1.0.0.0/r-Bundle-Symbolic-Name: R -Component.linux_amd64/1.0.0.0/r-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart3.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart3.properties deleted file mode 100644 index 922636f4c231..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiPart3.properties +++ /dev/null @@ -1,8 +0,0 @@ -org.graalvm.linux_amd64/1.0.1.0: GraalVM 1.0.1 -Component.linux_amd64/1.0.1.0/r: graalvm-ruby.zip -Component.linux_amd64/1.0.1.0/r-Bundle-Name: FastR -Component.linux_amd64/1.0.1.0/r-Bundle-Symbolic-Name: r -Component.linux_amd64/1.0.1.0/r-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/r-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiVersions.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiVersions.properties deleted file mode 100644 index 14b4eb559395..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogMultiVersions.properties +++ /dev/null @@ -1,44 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" -Component.0.33-dev_linux_amd64.r: ../0.33-dev/graalvm-fastr.zip -Component.0.33-dev_linux_amd64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_linux_amd64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - - -org.graalvm.linux_amd64/1.0.0.0: GraalVM 1.0 -Component.linux_amd64/1.0.0.0/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.0.0/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.0.0/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.0.0/ruby-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/r: ../1.0.0.0/graalvm-fastr.zip -Component.linux_amd64/1.0.0.0/r-Bundle-Name: FastR -Component.linux_amd64/1.0.0.0/r-Bundle-Symbolic-Name: R -Component.linux_amd64/1.0.0.0/r-Bundle-Version: 1.0.0.0 -Component.linux_amd64/1.0.0.0/r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - -org.graalvm.linux_amd64/1.0.1.0: GraalVM 1.0.1 -Component.linux_amd64/1.0.1.0/ruby: graalvm-ruby.zip -Component.linux_amd64/1.0.1.0/ruby-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/ruby-Bundle-Symbolic-Name: ruby -Component.linux_amd64/1.0.1.0/ruby-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - - -# Python is intentionally just for version 1.0.1.0 -Component.linux_amd64/1.0.1.0/python: graalvm-python.zip -Component.linux_amd64/1.0.1.0/python-Bundle-Name: TruffleRuby -Component.linux_amd64/1.0.1.0/python-Bundle-Symbolic-Name: python -Component.linux_amd64/1.0.1.0/python-Bundle-Version: 1.0.1.0 -Component.linux_amd64/1.0.1.0/python-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogWithDifferentOsArch.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogWithDifferentOsArch.properties deleted file mode 100644 index 26c95924064c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/catalogWithDifferentOsArch.properties +++ /dev/null @@ -1,75 +0,0 @@ -org.graalvm.0.33-dev_linux_amd64: GraalVM 0.33-dev linux amd64 -org.graalvm.0.33-dev_linux_musl_amd64: GraalVM 0.33-dev linux_musl amd64 - -Component.0.33-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.33-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_arch=amd64))" - -Component.0.33-dev_Linux_x86_64.r: ../0.33-dev/graalvm-fastr.zip -Component.0.33-dev_Linux_x86_64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_Linux_x86_64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_Linux_x86_64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_Linux_x86_64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.33-dev)(os_name=Linux)(os_arch=x86_64))" - -Component.0.33-dev_linux_musl_amd64.ruby: graalvm-ruby_musl.zip -Component.0.33-dev_linux_musl_amd64.ruby-Bundle-Name: TruffleRuby 0.33-dev -Component.0.33-dev_linux_musl_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.33-dev_linux_musl_amd64.ruby-Bundle-Version: 0.33-dev -Component.0.33-dev_linux_musl_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=linux)(os_variant=musl)(os_arch=amd64))" - -Component.0.33-dev_Linux_musl_x86_64.r: ../0.33-dev/graalvm-fastr_musl.zip -Component.0.33-dev_Linux_musl_x86_64.r-Bundle-Name: FastR 0.33-dev -Component.0.33-dev_Linux_musl_x86_64.r-Bundle-Symbolic-Name: R -Component.0.33-dev_Linux_musl_x86_64.r-Bundle-Version: 0.33-dev -Component.0.33-dev_Linux_musl_x86_64.r-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.33-dev)(os_name=Linux)(os_variant=musl)(os_arch=x86_64))" - -org.graalvm.0.34-dev_linux_x86_64: GraalVM 0.33-dev linux amd64 -org.graalvm.0.34-dev_linux_musl_x86_64: GraalVM 0.33-dev linux_musl amd64 - -Component.0.34-dev_linux_amd64.ruby: graalvm-ruby.zip -Component.0.34-dev_linux_amd64.ruby-Bundle-Name: TruffleRuby 0.34-dev -Component.0.34-dev_linux_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.34-dev_linux_amd64.ruby-Bundle-Version: 0.34-dev -Component.0.34-dev_linux_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.34-dev)(os_name=linux)(os_arch=amd64))" - -Component.0.34-dev_Linux_x86_64.r: ../0.34-dev/graalvm-fastr.zip -Component.0.34-dev_Linux_x86_64.r-Bundle-Name: FastR 0.34-dev -Component.0.34-dev_Linux_x86_64.r-Bundle-Symbolic-Name: R -Component.0.34-dev_Linux_x86_64.r-Bundle-Version: 0.34-dev -Component.0.34-dev_Linux_x86_64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.34-dev)(os_name=Linux)(os_arch=x86_64))" - -Component.0.34-dev_linux_musl_amd64.ruby: graalvm-ruby_musl.zip -Component.0.34-dev_linux_musl_amd64.ruby-Bundle-Name: TruffleRuby 0.34-dev -Component.0.34-dev_linux_musl_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.34-dev_linux_musl_amd64.ruby-Bundle-Version: 0.34-dev -Component.0.34-dev_linux_musl_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.34-dev)(os_name=linux)(os_variant=musl)(os_arch=amd64))" - -Component.0.34-dev_Linux_musl_x86_64.r: ../0.34-dev/graalvm-fastr_musl.zip -Component.0.34-dev_Linux_musl_x86_64.r-Bundle-Name: FastR 0.34-dev -Component.0.34-dev_Linux_musl_x86_64.r-Bundle-Symbolic-Name: R -Component.0.34-dev_Linux_musl_x86_64.r-Bundle-Version: 0.34-dev -Component.0.34-dev_Linux_musl_x86_64.r-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.34-dev)(os_name=Linux)(os_variant=musl)(os_arch=x86_64))" - -org.graalvm.0.35-dev_darwin_x86_64: GraalVM 0.33-dev linux amd64 - -Component.0.35-dev_darwin_amd64.ruby: graalvm-ruby.zip -Component.0.35-dev_darwin_amd64.ruby-Bundle-Name: TruffleRuby 0.35-dev -Component.0.35-dev_darwin_amd64.ruby-Bundle-Symbolic-Name: ruby -Component.0.35-dev_darwin_amd64.ruby-Bundle-Version: 0.35-dev -Component.0.35-dev_darwin_amd64.ruby-Bundle-RequireCapability: org.graalvm; \ - filter:="(&(graalvm_version=0.35-dev)(os_name=macos)(os_arch=amd64))" - -Component.0.35-dev_macos_x86_64.r: ../0.35-dev/graalvm-fastr.zip -Component.0.35-dev_macos_x86_64.r-Bundle-Name: FastR 0.35-dev -Component.0.35-dev_macos_x86_64.r-Bundle-Symbolic-Name: R -Component.0.35-dev_macos_x86_64.r-Bundle-Version: 0.35-dev -Component.0.35-dev_macos_x86_64.r-Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=0.35-dev)(os_name=Darwin)(os_arch=x86_64))" - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/emptyRelease.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/emptyRelease.properties deleted file mode 100644 index 8e3a9fba7023..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/emptyRelease.properties +++ /dev/null @@ -1,7 +0,0 @@ -JAVA_VERSION="1.8.0_272" -OS_NAME="Linux" -OS_VERSION="2.6" -OS_ARCH="amd64" -SOURCE=" jvmci:0bbce9bf3339 compiler:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 graal-js:b53c4e144b5909876b377e31be69e3b3f381ae0b graal-nodejs:b53c4e144b5909876b377e31be69e3b3f381ae0b java-benchmarks:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 regex:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sdk:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sulong:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 tools:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 truffle:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438" -GRAALVM_VERSION="20.3.0" -COMMIT_INFO={"compiler": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "graal-js": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "graal-nodejs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "java-benchmarks": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "regex": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sdk": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sulong": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "tools": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "truffle": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}} diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ce.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ce.properties deleted file mode 100644 index f9943e9f7f3a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ce.properties +++ /dev/null @@ -1,8 +0,0 @@ -JAVA_VERSION="1.8.0_272" -OS_NAME="Linux" -OS_VERSION="2.6" -OS_ARCH="amd64" -SOURCE=" jvmci:0bbce9bf3339 compiler:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 graal-js:b53c4e144b5909876b377e31be69e3b3f381ae0b graal-nodejs:b53c4e144b5909876b377e31be69e3b3f381ae0b java-benchmarks:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 regex:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sdk:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sulong:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 tools:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 truffle:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438" -GRAALVM_VERSION="20.3.0" -COMMIT_INFO={"compiler": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "graal-js": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "graal-nodejs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "java-benchmarks": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "regex": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sdk": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sulong": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "tools": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "truffle": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}} -component_catalog="https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8.properties" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ceWithEE.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ceWithEE.properties deleted file mode 100644 index 48d97c77e218..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ceWithEE.properties +++ /dev/null @@ -1,8 +0,0 @@ -JAVA_VERSION="1.8.0_272" -OS_NAME="Linux" -OS_VERSION="2.6" -OS_ARCH="amd64" -SOURCE=" jvmci:0bbce9bf3339 compiler:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 graal-js:b53c4e144b5909876b377e31be69e3b3f381ae0b graal-nodejs:b53c4e144b5909876b377e31be69e3b3f381ae0b java-benchmarks:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 regex:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sdk:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sulong:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 tools:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 truffle:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438" -GRAALVM_VERSION="20.3.0" -COMMIT_INFO={"compiler": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "graal-js": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "graal-nodejs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "java-benchmarks": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "regex": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sdk": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sulong": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "tools": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "truffle": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}} -component_catalog="https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8.properties|{ee=Enterprise Edition}gds://oca.opensource.oracle.com/gds/meta-data.json|https://www.graalvm.org/component-catalog/graal-updater-ee-component-catalog-java8.properties" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ee.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ee.properties deleted file mode 100644 index 8a222a3e31f3..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release20ee.properties +++ /dev/null @@ -1,10 +0,0 @@ -JAVA_VERSION="1.8.0_271" -OS_NAME="Linux" -OS_VERSION="2.6" -OS_ARCH="amd64" -SOURCE=" .:37bcc83348f5 corba:628331de3f70 deploy:72af6e8518b4 hotspot/make/closed:ec4675b39294 hotspot/src/closed:ccf62e903c33 install:e88eaa33ef57 jaxp:c384762e3ead jaxws:42201112fc8a jdk:a72057a7a077 jdk/make/closed:fbbd4cb2442d jdk/src/closed:66ae2a776e8a langtools:56c7ccb7641f nashorn:2cde13247430 jvmci:6b5d53f096d8 compiler:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 graal-enterprise:607aa8fb21145dd964ffddcad849f0534375166a graal-js:b53c4e144b5909876b377e31be69e3b3f381ae0b graal-nodejs:b53c4e144b5909876b377e31be69e3b3f381ae0b java-benchmarks:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 regex:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sdk:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm-enterprise:607aa8fb21145dd964ffddcad849f0534375166a substratevm-enterprise-gcs:d61eba18250db97ba247d31bd8b272fb681ca9f2 sulong:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sulong-managed:607aa8fb21145dd964ffddcad849f0534375166a tools:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 tools-enterprise:607aa8fb21145dd964ffddcad849f0534375166a truffle:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm-enterprise:607aa8fb21145dd964ffddcad849f0534375166a" -BUILD_TYPE="commercial" -GRAALVM_VERSION="20.3.0" -COMMIT_INFO={"compiler": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "graal-enterprise": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217785, "commit.rev": "607aa8fb21145dd964ffddcad849f0534375166a"}, "graal-js": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "graal-nodejs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "java-benchmarks": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "regex": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sdk": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm-enterprise": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217785, "commit.rev": "607aa8fb21145dd964ffddcad849f0534375166a"}, "substratevm-enterprise-gcs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1603648394, "commit.rev": "d61eba18250db97ba247d31bd8b272fb681ca9f2"}, "sulong": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sulong-managed": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217785, "commit.rev": "607aa8fb21145dd964ffddcad849f0534375166a"}, "tools": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "tools-enterprise": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217785, "commit.rev": "607aa8fb21145dd964ffddcad849f0534375166a"}, "truffle": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm-enterprise": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217785, "commit.rev": "607aa8fb21145dd964ffddcad849f0534375166a"}} -component_catalog="gds://oca.opensource.oracle.com/gds/meta-data.json|uln://linux-update.oracle.com/rpc/api/?linux=generic_linux_x86_64_graalvm_jdk8&macos=macos_64_graalvm_jdk8&windows=windows_64_graalvm_jdk8|https://www.graalvm.org/component-catalog/graal-updater-ee-component-catalog-java8.properties" -ee_component_catalog_editionLabel=Enterprise Edition diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release21ce.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release21ce.properties deleted file mode 100644 index c6afe4aa3147..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release21ce.properties +++ /dev/null @@ -1,15 +0,0 @@ -JAVA_VERSION="1.8.0_272" -OS_NAME="Linux" -OS_VERSION="2.6" -OS_ARCH="amd64" -SOURCE=" jvmci:0bbce9bf3339 compiler:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 graal-js:b53c4e144b5909876b377e31be69e3b3f381ae0b graal-nodejs:b53c4e144b5909876b377e31be69e3b3f381ae0b java-benchmarks:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 regex:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sdk:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sulong:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 tools:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 truffle:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438" -GRAALVM_VERSION="20.3.0" -COMMIT_INFO={"compiler": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "graal-js": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "graal-nodejs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "java-benchmarks": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "regex": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sdk": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sulong": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "tools": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "truffle": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}} -component_catalog="https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8.properties" - -component_catalog_url=https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8.properties -component_catalog_label=GitHub CE 8 Components - -component_catalog_2_url=https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java11.properties -component_catalog_2_label=GitHub CE 11 Components - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release21ceWithEE.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release21ceWithEE.properties deleted file mode 100644 index 38556facba6c..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/release21ceWithEE.properties +++ /dev/null @@ -1,26 +0,0 @@ -JAVA_VERSION="1.8.0_272" -OS_NAME="Linux" -OS_VERSION="2.6" -OS_ARCH="amd64" -SOURCE=" jvmci:0bbce9bf3339 compiler:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 graal-js:b53c4e144b5909876b377e31be69e3b3f381ae0b graal-nodejs:b53c4e144b5909876b377e31be69e3b3f381ae0b java-benchmarks:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 regex:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sdk:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 substratevm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 sulong:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 tools:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 truffle:c5ff5a5a091bfd974640aaf6fbe51c81bd080438 vm:c5ff5a5a091bfd974640aaf6fbe51c81bd080438" -GRAALVM_VERSION="20.3.0" -COMMIT_INFO={"compiler": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "graal-js": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "graal-nodejs": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217687, "commit.rev": "b53c4e144b5909876b377e31be69e3b3f381ae0b"}, "java-benchmarks": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "regex": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sdk": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "substratevm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "sulong": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "tools": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "truffle": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}, "vm": {"commit.committer": "Gilles Duboscq ", "commit.committer-ts": 1605217754, "commit.rev": "c5ff5a5a091bfd974640aaf6fbe51c81bd080438"}} -component_catalog="https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8.properties|{ee=Enterprise Edition}gds://oca.opensource.oracle.com/gds/meta-data.json|https://www.graalvm.org/component-catalog/graal-updater-ee-component-catalog-java8.properties" - -component_catalog_url=https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java8.properties -component_catalog_label=GitHub CE 8 Components -component_catalog_editionLabel=GraalVM CE - -component_catalog_2_url=https://www.graalvm.org/component-catalog/graal-updater-component-catalog-java11.properties -component_catalog_2_label=GitHub CE 11 Components - -ee_component_catalog_10_url=gds://oca.opensource.oracle.com/gds/meta-data.json -ee_component_catalog_10_label=GDS Component distribution -ee_component_catalog_editionLabel=GraalVM EE - -ee_component_catalog_15_url=https://whenever.acme.org/ee-extras.properties -ee_component_catalog_15_label=Some experimental components - -ee_component_catalog_13_url=https://www.graalvm.org/component-catalog/graal-updater-ee-component-catalog-java8.properties -ee_component_catalog_13_label=Github distribution -ee_component_catalog_13_paramX=valueY diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/truffleruby2.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/truffleruby2.jar deleted file mode 100644 index 122291a96c57..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/remote/data/truffleruby2.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/graalvm-19.3.0.0.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/graalvm-19.3.0.0.jar deleted file mode 100644 index f997a0c30bcf..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/graalvm-19.3.0.0.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/MANIFEST.MF deleted file mode 100644 index 60c3bee38791..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/MANIFEST.MF +++ /dev/null @@ -1,5 +0,0 @@ -Bundle-Name: LLVM Toolchain -Bundle-Symbolic-Name: org.graalvm.llvm-toolchain -Bundle-Version: 19.3.0.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=19.3.0.0 - )(os_arch=amd64))" diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/permissions deleted file mode 100644 index bb398974f8a7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/permissions +++ /dev/null @@ -1,7 +0,0 @@ -bin/truffleruby = rwxrwxrwx -bin/rake = rwxrwxrwx -jre/bin/truffleruby = rwxrwxrwx -jre/bin/rake = rwxrwxrwx -LICENSE_TRUFFLERUBY.md = rwxrwxrwx -jre/languages/ruby/release = rw-rw-r-- -jre/languages/ruby/lib/cext/include/sulong/polyglot.h = rw-rw-r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/symlinks deleted file mode 100644 index fa711df113bd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/META-INF/symlinks +++ /dev/null @@ -1,6 +0,0 @@ -bin/ruby = ../jre/bin/ruby -bin/rake = ../jre/bin/rake -jre/bin/truffleruby = ../languages/ruby/bin/truffleruby -jre/bin/rake = ../languages/ruby/bin/rake -LICENSE_TRUFFLERUBY.md = jre/languages/ruby/LICENSE_TRUFFLERUBY.md -jre/languages/ruby/bin/ruby = truffleruby \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/LICENSE_TRUFFLERUBY.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/LICENSE_TRUFFLERUBY.md deleted file mode 100644 index 8e3aea7e3802..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/LICENSE_TRUFFLERUBY.md +++ /dev/null @@ -1 +0,0 @@ -Some license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/README.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/README.md deleted file mode 100644 index e23317b39c52..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/README.md +++ /dev/null @@ -1,218 +0,0 @@ -![TruffleRuby logo](logo/png/truffleruby_logo_horizontal_medium.png) - -A high performance implementation of the Ruby programming language. Built on -[GraalVM](http://graalvm.org/) by [Oracle Labs](https://labs.oracle.com). - -## Getting started - -There are three ways to install TruffleRuby: - -* Via [GraalVM](doc/user/installing-graalvm.md), which includes support for - other languages such as JavaScript, R and Python and supports both the - [*native* and *JVM* configurations](#truffleruby-configurations). - Inside GraalVM will then be a `bin/ruby` command that runs TruffleRuby. - We recommend that you use a [Ruby manager](doc/user/ruby-managers.md#configuring-ruby-managers-for-the-full-graalvm-distribution) - to use TruffleRuby inside GraalVM. - -* Via your [Ruby manager/installer](doc/user/ruby-managers.md) (RVM, rbenv, - chruby, ruby-build, ruby-install). This contains only TruffleRuby, in the - [*native* configuration](#truffleruby-configurations), making it a smaller - download. It is meant for users just wanting a Ruby implementation and already - using a Ruby manager. - -* Using the [standalone distribution](doc/user/standalone-distribution.md) - as a simple binary tarball. This distribution is also useful for - [testing TruffleRuby in CI](doc/user/standalone-distribution.md). - On [TravisCI](https://docs.travis-ci.com/user/languages/ruby#truffleruby), you can simply use: - ```yaml - language: ruby - rvm: - - truffleruby - ``` - -You can use `gem` to install Gems as normal. - -You can also build TruffleRuby from source, see the -[building instructions](doc/contributor/workflow.md), and using -[Docker](doc/contributor/docker.md). - -Please report any issue you might find on [GitHub](https://github.com/oracle/truffleruby/issues). - -## Aim - -TruffleRuby aims to: - -* Run idiomatic Ruby code faster -* Run Ruby code in parallel -* Boot Ruby applications in less time -* Execute C extensions in a managed environment -* Add fast and low-overhead interoperability with languages like Java, JavaScript, Python and R -* Provide new tooling such as debuggers and monitoring -* All while maintaining very high compatibility with the standard implementation of Ruby - -## TruffleRuby configurations - -There are two main configurations of TruffleRuby: *native* and *JVM*. It's -important to understand the different configurations of TruffleRuby, as each has -different capabilities and performance characteristics. You should pick the -execution mode that is appropriate for your application. - -TruffleRuby by default runs in the *native* -configuration. In this configuration, TruffleRuby is ahead-of-time compiled to a -standalone native executable. This means that you don't need a JVM installed on -your system to use it. The advantage of the native configuration is that it -[starts about as fast as MRI](doc/contributor/svm.md), it may use less memory, -and it becomes fast in less time. The disadvantage of the native configuration -is that you can't use Java tools like VisualVM, you can't use Java -interoperability, and *peak performance may be lower than on the JVM*. The -native configuration is used by default, but you can also request it using -`--native`. To use polyglot programming with the *native* configuration, you -need to use the `--polyglot` flag. To check you are using the *native* -configuration, `ruby --version` should mention `Native`. - -TruffleRuby can also be used in the *JVM* configuration, where it runs as a -normal Java application on the JVM, as any other Java application would. The -advantage of the JVM configuration is that you can use Java interoperability, -and *peak performance may be higher than the native configuration*. The -disadvantage of the JVM configuration is that it takes much longer to start and -to get fast, and may use more memory. The JVM configuration is requested using -`--jvm`. To check you are using the *JVM* configuration, `ruby --version` should -not mention `Native`. - -If you are running a short-running program you probably want the default, -*native*, configuration. If you are running a long-running program and want the -highest possible performance you probably want the *JVM* configuration, by using -`--jvm`. - -At runtime you can tell if you are using the native configuration using -`TruffleRuby.native?`. - -You won't encounter it when using TruffleRuby from the GraalVM, but there is -also another configuration which is TruffleRuby running on the JVM but with the -Graal compiler not available. This configuration will have much lower -performance and should normally only be used for development. `ruby --version` -will mention `Interpreter` for this configuration. - -## System compatibility - -TruffleRuby is actively tested on these systems: - -* Oracle Linux 7 -* Ubuntu 18.04 LTS -* Ubuntu 16.04 LTS -* Fedora 28 -* macOS 10.14 (Mojave) -* macOS 10.13 (High Sierra) - -You may find that TruffleRuby will not work if you severely restrict the -environment, for example by unmounting system filesystems such as `/dev/shm`. - -## Dependencies - -* [LLVM](doc/user/installing-llvm.md) to build and run C extensions -* [libssl](doc/user/installing-libssl.md) for the `openssl` C extension -* [zlib](doc/user/installing-zlib.md) for the `zlib` C extension - -Without these dependencies, many libraries including RubyGems will not work. -TruffleRuby will try to print a nice error message if a dependency is missing, -but this can only be done on a best effort basis. - -You may also need to set up a [UTF-8 locale](doc/user/utf8-locale.md). - -## Current status - -We recommend that people trying TruffleRuby on their gems and applications -[get in touch with us](#contact) for help. - -TruffleRuby is progressing fast but is currently probably not ready for you to -try running your full Ruby application on. However it is ready for -experimentation and curious end-users to try on their gems and smaller -applications. - -TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it -is missing support for Nokogiri and ActiveRecord database drivers which makes it -not practical to run real Rails applications at the moment. - -You will find that many C extensions will not work without modification. - -## Migration from MRI - -TruffleRuby should in most cases work as a drop-in replacement for MRI, but you -should read about our [compatibility](doc/user/compatibility.md). - -## Migration from JRuby - -For many use cases TruffleRuby should work as a drop-in replacement for JRuby. -However, our approach to integration with Java is different to JRuby so you -should read our [migration guide](doc/user/jruby-migration.md). - -## Documentation - -Extensive documentation is available in [`doc`](doc). -[`doc/user`](doc/user) documents how to use TruffleRuby and -[`doc/contributor`](doc/contributor) documents how to develop TruffleRuby. - -## Contact - -The best way to get in touch with us is to join us in -https://gitter.im/graalvm/truffleruby, but you can also Tweet to -[@TruffleRuby](https://twitter.com/truffleruby), or email -chris.seaton@oracle.com. - -## Mailing list - -Announcements about GraalVM, including TruffleRuby, are made on the -[graal-dev](http://mail.openjdk.java.net/mailman/listinfo/graal-dev) mailing list. - -## Authors - -The main authors of TruffleRuby in order of joining the project are: - -* Chris Seaton -* Benoit Daloze -* Kevin Menard -* Petr Chalupa -* Brandon Fish -* Duncan MacGregor -* Christian Wirth - -Additionally: - -* Thomas Würthinger -* Matthias Grimmer -* Josef Haider -* Fabio Niephaus -* Matthias Springer -* Lucas Allan Amorim -* Aditya Bhardwaj - -Collaborations with: - -* [Institut für Systemsoftware at Johannes Kepler University - Linz](http://ssw.jku.at) - -And others. - -## Security - -See the [security documentation](doc/user/security.md). - -## Licence - -TruffleRuby is copyright (c) 2013-2019 Oracle and/or its affiliates, and is made -available to you under the terms of any one of the following three licenses: - -* Eclipse Public License version 1.0, or -* GNU General Public License version 2, or -* GNU Lesser General Public License version 2.1. - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. - -## Attribution - -TruffleRuby is a fork of [JRuby](https://github.com/jruby/jruby), combining it -with code from the [Rubinius](https://github.com/rubinius/rubinius) project, and -also containing code from the standard implementation of Ruby, -[MRI](https://github.com/ruby/ruby). diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/doc/doc/legal/ruby-licence.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/doc/doc/legal/ruby-licence.txt deleted file mode 100644 index f06056fb45fb..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/doc/doc/legal/ruby-licence.txt +++ /dev/null @@ -1,56 +0,0 @@ -Ruby is copyrighted free software by Yukihiro Matsumoto . -You can redistribute it and/or modify it under either the terms of the -2-clause BSDL (see the file BSDL), or the conditions below: - - 1. You may make and give away verbatim copies of the source form of the - software without restriction, provided that you duplicate all of the - original copyright notices and associated disclaimers. - - 2. You may modify your copy of the software in any way, provided that - you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said - modifications to Usenet or an equivalent medium, or by allowing - the author to include your modifications in the software. - - b) use the modified software only within your corporation or - organization. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 3. You may distribute the software in object code or binary form, - provided that you do at least ONE of the following: - - a) distribute the binaries and library files of the software, - together with instructions (in the manual page or equivalent) - on where to get the original distribution. - - b) accompany the distribution with the machine-readable source of - the software. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 4. You may modify and include the part of the software into any other - software (possibly commercial). But some files in the distribution - are not written by the author, so that they are not under these terms. - - For the list of those files and their copying conditions, see the - file LEGAL. - - 5. The scripts and library files supplied as input to or produced as - output from the software do not automatically fall under the - copyright of the software, but belong to whomever generated them, - and may be sold commercially, and may be aggregated with this - software. - - 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/doc/doc/user/netbeans.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/doc/doc/user/netbeans.md deleted file mode 100644 index 0e9236814854..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/doc/doc/user/netbeans.md +++ /dev/null @@ -1,29 +0,0 @@ -# NetBeans integration - -You can debug Ruby programs running in TruffleRuby using the NetBeans IDE. - -## Setup - -* Install NetBeans 8.2 -* Via Tools, Plugins, install 'Truffle Debugging Support' -* [Install TruffleRuby](installing-graalvm.md) - -We then need a project to debug. An example project that works well and -demonstrates features is available on GitHub: - -``` -$ git clone https://github.com/jtulach/sieve.git -``` - -Open `ruby+js/fromjava` as a NetBeans project. - -* Right click on the project -* Open Properties, Build, Compile, Java Platform -* Manage Java Platforms, Add Platform, and select the GraalVM directory -* Now we can set a breakpoint in Ruby by opening `sieve.rb` and clicking on the - line in `Natural#next` -* Finally, 'Debug Project' - -You will be able to debug the Ruby program as normal, and if you look at the -call stack you'll see that there are also Java and JavaScript frames that you -can debug as well, all inside the same virtual machine and debugger. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/native-image.properties deleted file mode 100644 index 69c2e64ac39f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/native-image.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file contains native-image arguments needed to build truffleruby -# - -ImageName = truffleruby - -Requires = tool:truffle tool:nfi - -LauncherClass = org.truffleruby.launcher.RubyLauncher -LauncherClassPath = languages/ruby/truffleruby-annotations.jar:languages/ruby/truffleruby-shared.jar:lib/graalvm/launcher-common.jar:lib/graalvm/truffleruby-launcher.jar - -Args = -H:MaxRuntimeCompileMethods=5400 \ - -H:+AddAllCharsets - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=ruby \ - -Dorg.graalvm.launcher.relative.llvm.home=../lib/cext/sulong-libs diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/llvm-toolchain/jre/languages/ruby/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/MANIFEST.MF deleted file mode 100644 index 210519336156..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/MANIFEST.MF +++ /dev/null @@ -1,25 +0,0 @@ -Bundle-Name: FastR -Bundle-Symbolic-Name: org.graalvm.R -Bundle-Version: 19.3.0.0 -Require-Bundle: org.graalvm.llvm-toolchain -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=19.3.0.0 - )(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/R -x-GraalVM-Message-PostInst: NOTES:\n---------------\nSome R packages nee - d a system-dependent configuration before they can be installed. A gener - ic configuration that works out of the box in most cases is provided by - default. If you wish to fine-tune the configuration to your system or sh - ould you encounter any issues during R package installation, try running - the following script that adjusts the configuration to your system: \n - ${graalvm_home}/jre/languages/R/bin/configure_fastr\n\nThe R componen - t comes without native image by default. If you wish to build the native - image, which provides faster startup, but slightly slower peak performa - nce, then run the following:\n ${graalvm_home}/jre/languages/R/bin/ins - tall_r_native_image\n\nThe native image is then used by default. Pass '- - -jvm' flag to the R or Rscript launcher to use JVM instead of the native - image. Note that the native image is not stable yet and is intended for - evaluation purposes and experiments. Some features may not work when th - e native image is installed, most notably the --polyglot switch. The nat - ive image can be uninstalled using the installation script with 'uninsta - ll' argument.\n\nSee http://www.graalvm.org/docs/reference-manual/langua - ges/r for more. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/permissions deleted file mode 100644 index 14fe1475669d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/permissions +++ /dev/null @@ -1,1622 +0,0 @@ -jre/languages/R/bin/R = rwxr-xr-x -jre/languages/R/bin/Rdconv = rwxr-xr-x -jre/languages/R/bin/SHLIB = rwxr-xr-x -jre/languages/R/bin/COMPILE = rwxr-xr-x -jre/languages/R/bin/LINK = rwxr-xr-x -jre/languages/R/bin/Sweave = rwxr-xr-x -jre/languages/R/bin/BATCH = rwxr-xr-x -jre/languages/R/bin/install_r_native_image = rwxr-xr-x -jre/languages/R/bin/f77_f2c = rwxr-xr-x -jre/languages/R/bin/build = rwxr-xr-x -jre/languages/R/bin/mkinstalldirs = rwxr-xr-x -jre/languages/R/bin/Rdiff = rwxr-xr-x -jre/languages/R/bin/check = rwxr-xr-x -jre/languages/R/bin/Stangle = rwxr-xr-x -jre/languages/R/bin/pager = rwxr-xr-x -jre/languages/R/include/S.h = rw-r--r-- -jre/languages/R/include/Rinternals.h = rw-r--r-- -jre/languages/R/include/Makefile = rw-r--r-- -jre/languages/R/include/Rembedded.h = rw-r--r-- -jre/languages/R/include/Rconfig.h = rw-r--r-- -jre/languages/R/include/Rdefines.h = rw-r--r-- -jre/languages/R/include/linked = rw-r--r-- -jre/languages/R/include/Rmath.h = rw-r--r-- -jre/languages/R/include/R.h = rw-r--r-- -jre/languages/R/include/Rversion.h = rw-r--r-- -jre/languages/R/include/Rinterface.h = rw-r--r-- -jre/languages/R/include/R_ext/GraphicsEngine.h = rw-r--r-- -jre/languages/R/include/R_ext/R-ftp-http.h = rw-r--r-- -jre/languages/R/include/R_ext/Error.h = rw-r--r-- -jre/languages/R/include/R_ext/Itermacros.h = rw-r--r-- -jre/languages/R/include/R_ext/Utils.h = rw-r--r-- -jre/languages/R/include/R_ext/stats_stubs.h = rw-r--r-- -jre/languages/R/include/R_ext/GetX11Image.h = rw-r--r-- -jre/languages/R/include/R_ext/GraphicsDevice.h = rw-r--r-- -jre/languages/R/include/R_ext/Callbacks.h = rw-r--r-- -jre/languages/R/include/R_ext/Rdynload.h = rw-r--r-- -jre/languages/R/include/R_ext/Parse.h = rw-r--r-- -jre/languages/R/include/R_ext/RS.h = rw-r--r-- -jre/languages/R/include/R_ext/BLAS.h = rw-r--r-- -jre/languages/R/include/R_ext/Arith.h = rw-r--r-- -jre/languages/R/include/R_ext/Boolean.h = rw-r--r-- -jre/languages/R/include/R_ext/Applic.h = rw-r--r-- -jre/languages/R/include/R_ext/Linpack.h = rw-r--r-- -jre/languages/R/include/R_ext/Constants.h = rw-r--r-- -jre/languages/R/include/R_ext/Riconv.h = rw-r--r-- -jre/languages/R/include/R_ext/RStartup.h = rw-r--r-- -jre/languages/R/include/R_ext/Print.h = rw-r--r-- -jre/languages/R/include/R_ext/QuartzDevice.h = rw-r--r-- -jre/languages/R/include/R_ext/libextern.h = rw-r--r-- -jre/languages/R/include/R_ext/MathThreads.h = rw-r--r-- -jre/languages/R/include/R_ext/Memory.h = rw-r--r-- -jre/languages/R/include/R_ext/Connections.h = rw-r--r-- -jre/languages/R/include/R_ext/PrtUtil.h = rw-r--r-- -jre/languages/R/include/R_ext/Altrep.h = rw-r--r-- -jre/languages/R/include/R_ext/Rallocators.h = rw-r--r-- -jre/languages/R/include/R_ext/Visibility.h = rw-r--r-- -jre/languages/R/include/R_ext/stats_package.h = rw-r--r-- -jre/languages/R/include/R_ext/Complex.h = rw-r--r-- -jre/languages/R/include/R_ext/Lapack.h = rw-r--r-- -jre/languages/R/include/R_ext/Random.h = rw-r--r-- -jre/languages/R/include/R_ext/eventloop.h = rw-r--r-- -jre/languages/R/lib/libgfortran.dylib = rwxrwxrwx -jre/languages/R/lib/libz.dylib = rwxrwxrwx -jre/languages/R/lib/libpcre.1.dylib = rw-r--r-- -jre/languages/R/lib/libRblas.dylib = rwxr-xr-x -jre/languages/R/lib/libpcre.dylib = rwxrwxrwx -jre/languages/R/lib/libgfortran.3.dylib = rw-r--r-- -jre/languages/R/lib/libgcc_s.dylib = rwxrwxrwx -jre/languages/R/lib/libR.dylib = rwxr-xr-x -jre/languages/R/lib/libquadmath.0.dylib = rw-r--r-- -jre/languages/R/lib/libz.1.dylib = rw-r--r-- -jre/languages/R/lib/libgcc_s.1.dylib = rw-r--r-- -jre/languages/R/lib/libRlapack.dylib = rwxr-xr-x -jre/languages/R/lib/libquadmath.dylib = rwxrwxrwx -jre/languages/R/library/MASS/CITATION = rw-r--r-- -jre/languages/R/library/MASS/NAMESPACE = rw-r--r-- -jre/languages/R/library/MASS/DESCRIPTION = rw-r--r-- -jre/languages/R/library/MASS/NEWS = rw-r--r-- -jre/languages/R/library/MASS/INDEX = rw-r--r-- -jre/languages/R/library/MASS/R/profiles.R = rw-r--r-- -jre/languages/R/library/MASS/R/write.matrix.R = rw-r--r-- -jre/languages/R/library/MASS/R/MASS.rdx = rw-r--r-- -jre/languages/R/library/MASS/R/corresp.R = rw-r--r-- -jre/languages/R/library/MASS/R/fitdistr.R = rw-r--r-- -jre/languages/R/library/MASS/R/sammon.R = rw-r--r-- -jre/languages/R/library/MASS/R/logtrans.R = rw-r--r-- -jre/languages/R/library/MASS/R/MASS = rw-r--r-- -jre/languages/R/library/MASS/R/MASS.rdb = rw-r--r-- -jre/languages/R/library/MASS/R/dose.p.R = rw-r--r-- -jre/languages/R/library/MASS/R/stdres.R = rw-r--r-- -jre/languages/R/library/MASS/R/enlist.R = rw-r--r-- -jre/languages/R/library/MASS/R/add.R = rw-r--r-- -jre/languages/R/library/MASS/R/neg.bin.R = rw-r--r-- -jre/languages/R/library/MASS/R/contr.sdif.R = rw-r--r-- -jre/languages/R/library/MASS/R/misc.R = rw-r--r-- -jre/languages/R/library/MASS/R/cov.trob.R = rw-r--r-- -jre/languages/R/library/MASS/R/polr.R = rw-r--r-- -jre/languages/R/library/MASS/R/hist.scott.R = rw-r--r-- -jre/languages/R/library/MASS/R/lda.R = rw-r--r-- -jre/languages/R/library/MASS/R/stepAIC.R = rw-r--r-- -jre/languages/R/library/MASS/R/area.R = rw-r--r-- -jre/languages/R/library/MASS/R/rms.curv.R = rw-r--r-- -jre/languages/R/library/MASS/R/fractions.R = rw-r--r-- -jre/languages/R/library/MASS/R/eqscplot.R = rw-r--r-- -jre/languages/R/library/MASS/R/kde2d.R = rw-r--r-- -jre/languages/R/library/MASS/R/lm.ridge.R = rw-r--r-- -jre/languages/R/library/MASS/R/confint.R = rw-r--r-- -jre/languages/R/library/MASS/R/ucv.R = rw-r--r-- -jre/languages/R/library/MASS/R/loglm.R = rw-r--r-- -jre/languages/R/library/MASS/R/gamma.shape.R = rw-r--r-- -jre/languages/R/library/MASS/R/negexp.R = rw-r--r-- -jre/languages/R/library/MASS/R/mca.R = rw-r--r-- -jre/languages/R/library/MASS/R/rlm.R = rw-r--r-- -jre/languages/R/library/MASS/R/truehist.R = rw-r--r-- -jre/languages/R/library/MASS/R/negbin.R = rw-r--r-- -jre/languages/R/library/MASS/R/qda.R = rw-r--r-- -jre/languages/R/library/MASS/R/huber.R = rw-r--r-- -jre/languages/R/library/MASS/R/mvrnorm.R = rw-r--r-- -jre/languages/R/library/MASS/R/zzz.R = rw-r--r-- -jre/languages/R/library/MASS/R/boxcox.R = rw-r--r-- -jre/languages/R/library/MASS/R/lm.gls.R = rw-r--r-- -jre/languages/R/library/MASS/R/parcoord.R = rw-r--r-- -jre/languages/R/library/MASS/R/glmmPQL.R = rw-r--r-- -jre/languages/R/library/MASS/R/isoMDS.R = rw-r--r-- -jre/languages/R/library/MASS/R/hubers.R = rw-r--r-- -jre/languages/R/library/MASS/R/lqs.R = rw-r--r-- -jre/languages/R/library/MASS/Meta/data.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/links.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/features.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/package.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/MASS/html/R.css = rw-r--r-- -jre/languages/R/library/MASS/html/00Index.html = rw-r--r-- -jre/languages/R/library/MASS/libs/MASS.so = rwxr-xr-x -jre/languages/R/library/MASS/po/pl/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/en@quot/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/de/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/ko/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/fr/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch13.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch07.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch09.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch03.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch10.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch14.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch04.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch11.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch15.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch05.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch01.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch12.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch16.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch06.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch02.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch08.R = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/MASS/help/MASS.rdx = rw-r--r-- -jre/languages/R/library/MASS/help/MASS.rdb = rw-r--r-- -jre/languages/R/library/MASS/help/AnIndex = rw-r--r-- -jre/languages/R/library/MASS/help/aliases.rds = rw-r--r-- -jre/languages/R/library/MASS/help/paths.rds = rw-r--r-- -jre/languages/R/library/cluster/CITATION = rw-r--r-- -jre/languages/R/library/cluster/NEWS.Rd = rw-r--r-- -jre/languages/R/library/cluster/NAMESPACE = rw-r--r-- -jre/languages/R/library/cluster/DESCRIPTION = rw-r--r-- -jre/languages/R/library/cluster/INDEX = rw-r--r-- -jre/languages/R/library/cluster/test-tools.R = rw-r--r-- -jre/languages/R/library/cluster/R/internal.R = rw-r--r-- -jre/languages/R/library/cluster/R/clusGapGen.R = rw-r--r-- -jre/languages/R/library/cluster/R/0aaa.R = rw-r--r-- -jre/languages/R/library/cluster/R/cluster.rdb = rw-r--r-- -jre/languages/R/library/cluster/R/cluster.rdx = rw-r--r-- -jre/languages/R/library/cluster/R/cluster = rw-r--r-- -jre/languages/R/library/cluster/R/coef.R = rw-r--r-- -jre/languages/R/library/cluster/R/clara.q = rw-r--r-- -jre/languages/R/library/cluster/R/silhouette.R = rw-r--r-- -jre/languages/R/library/cluster/R/mona.q = rw-r--r-- -jre/languages/R/library/cluster/R/pam.q = rw-r--r-- -jre/languages/R/library/cluster/R/plothier.q = rw-r--r-- -jre/languages/R/library/cluster/R/fanny.q = rw-r--r-- -jre/languages/R/library/cluster/R/plotpart.q = rw-r--r-- -jre/languages/R/library/cluster/R/daisy.q = rw-r--r-- -jre/languages/R/library/cluster/R/clusGap.R = rw-r--r-- -jre/languages/R/library/cluster/R/zzz.R = rw-r--r-- -jre/languages/R/library/cluster/R/ellipsoidhull.R = rw-r--r-- -jre/languages/R/library/cluster/R/diana.q = rw-r--r-- -jre/languages/R/library/cluster/R/agnes.q = rw-r--r-- -jre/languages/R/library/cluster/Meta/data.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/links.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/features.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/package.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/cluster/html/R.css = rw-r--r-- -jre/languages/R/library/cluster/html/00Index.html = rw-r--r-- -jre/languages/R/library/cluster/libs/cluster.so = rwxr-xr-x -jre/languages/R/library/cluster/po/pl/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/en@quot/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/en@quot/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/de/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/de/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/ko/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/ko/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/fr/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/cluster/help/cluster.rdb = rw-r--r-- -jre/languages/R/library/cluster/help/cluster.rdx = rw-r--r-- -jre/languages/R/library/cluster/help/AnIndex = rw-r--r-- -jre/languages/R/library/cluster/help/aliases.rds = rw-r--r-- -jre/languages/R/library/cluster/help/paths.rds = rw-r--r-- -jre/languages/R/library/parallel/NAMESPACE = rw-r--r-- -jre/languages/R/library/parallel/DESCRIPTION = rw-r--r-- -jre/languages/R/library/parallel/INDEX = rw-r--r-- -jre/languages/R/library/parallel/R/parallel = rw-r--r-- -jre/languages/R/library/parallel/R/parallel.rdx = rw-r--r-- -jre/languages/R/library/parallel/R/parallel.rdb = rw-r--r-- -jre/languages/R/library/parallel/Meta/links.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/features.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/package.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/parallel/html/R.css = rw-r--r-- -jre/languages/R/library/parallel/html/00Index.html = rw-r--r-- -jre/languages/R/library/parallel/libs/parallel.so = rwxr-xr-x -jre/languages/R/library/parallel/doc/parallel.pdf = rw-r--r-- -jre/languages/R/library/parallel/help/AnIndex = rw-r--r-- -jre/languages/R/library/parallel/help/aliases.rds = rw-r--r-- -jre/languages/R/library/parallel/help/paths.rds = rw-r--r-- -jre/languages/R/library/parallel/help/parallel.rdx = rw-r--r-- -jre/languages/R/library/parallel/help/parallel.rdb = rw-r--r-- -jre/languages/R/library/tools/NAMESPACE = rw-r--r-- -jre/languages/R/library/tools/DESCRIPTION = rw-r--r-- -jre/languages/R/library/tools/INDEX = rw-r--r-- -jre/languages/R/library/tools/R/tools = rw-r--r-- -jre/languages/R/library/tools/R/tools.rdb = rw-r--r-- -jre/languages/R/library/tools/R/tools.rdx = rw-r--r-- -jre/languages/R/library/tools/R/sysdata.rdb = rw-r--r-- -jre/languages/R/library/tools/R/sysdata.rdx = rw-r--r-- -jre/languages/R/library/tools/Meta/links.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/features.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/package.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/tools/html/R.css = rw-r--r-- -jre/languages/R/library/tools/html/00Index.html = rw-r--r-- -jre/languages/R/library/tools/libs/tools.so = rwxr-xr-x -jre/languages/R/library/tools/help/AnIndex = rw-r--r-- -jre/languages/R/library/tools/help/aliases.rds = rw-r--r-- -jre/languages/R/library/tools/help/tools.rdb = rw-r--r-- -jre/languages/R/library/tools/help/tools.rdx = rw-r--r-- -jre/languages/R/library/tools/help/paths.rds = rw-r--r-- -jre/languages/R/library/methods/NAMESPACE = rw-r--r-- -jre/languages/R/library/methods/DESCRIPTION = rw-r--r-- -jre/languages/R/library/methods/INDEX = rw-r--r-- -jre/languages/R/library/methods/R/methods = rw-r--r-- -jre/languages/R/library/methods/R/methods.rdx = rw-r--r-- -jre/languages/R/library/methods/R/methods.rdb = rw-r--r-- -jre/languages/R/library/methods/Meta/links.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/features.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/package.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/methods/html/R.css = rw-r--r-- -jre/languages/R/library/methods/html/00Index.html = rw-r--r-- -jre/languages/R/library/methods/libs/methods.so = rwxr-xr-x -jre/languages/R/library/methods/help/AnIndex = rw-r--r-- -jre/languages/R/library/methods/help/aliases.rds = rw-r--r-- -jre/languages/R/library/methods/help/paths.rds = rw-r--r-- -jre/languages/R/library/methods/help/methods.rdx = rw-r--r-- -jre/languages/R/library/methods/help/methods.rdb = rw-r--r-- -jre/languages/R/library/boot/CITATION = rw-r--r-- -jre/languages/R/library/boot/NAMESPACE = rw-r--r-- -jre/languages/R/library/boot/bd.q = rw-r--r-- -jre/languages/R/library/boot/DESCRIPTION = rw-r--r-- -jre/languages/R/library/boot/INDEX = rw-r--r-- -jre/languages/R/library/boot/R/bootfuns.q = rw-r--r-- -jre/languages/R/library/boot/R/boot = rw-r--r-- -jre/languages/R/library/boot/R/bootpracs.q = rw-r--r-- -jre/languages/R/library/boot/R/boot.rdb = rw-r--r-- -jre/languages/R/library/boot/R/boot.rdx = rw-r--r-- -jre/languages/R/library/boot/Meta/data.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/links.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/features.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/package.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/boot/html/R.css = rw-r--r-- -jre/languages/R/library/boot/html/00Index.html = rw-r--r-- -jre/languages/R/library/boot/po/pl/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/ru/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/en@quot/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/de/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/ko/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/fr/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/boot/help/AnIndex = rw-r--r-- -jre/languages/R/library/boot/help/aliases.rds = rw-r--r-- -jre/languages/R/library/boot/help/paths.rds = rw-r--r-- -jre/languages/R/library/boot/help/boot.rdb = rw-r--r-- -jre/languages/R/library/boot/help/boot.rdx = rw-r--r-- -jre/languages/R/library/datasets/NAMESPACE = rw-r--r-- -jre/languages/R/library/datasets/DESCRIPTION = rw-r--r-- -jre/languages/R/library/datasets/INDEX = rw-r--r-- -jre/languages/R/library/datasets/Meta/data.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/links.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/features.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/package.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/datasets/html/R.css = rw-r--r-- -jre/languages/R/library/datasets/html/00Index.html = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/datasets/data/morley.tab = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/datasets/help/AnIndex = rw-r--r-- -jre/languages/R/library/datasets/help/aliases.rds = rw-r--r-- -jre/languages/R/library/datasets/help/paths.rds = rw-r--r-- -jre/languages/R/library/datasets/help/datasets.rdx = rw-r--r-- -jre/languages/R/library/datasets/help/datasets.rdb = rw-r--r-- -jre/languages/R/library/nnet/CITATION = rw-r--r-- -jre/languages/R/library/nnet/NAMESPACE = rw-r--r-- -jre/languages/R/library/nnet/DESCRIPTION = rw-r--r-- -jre/languages/R/library/nnet/NEWS = rw-r--r-- -jre/languages/R/library/nnet/INDEX = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.R = rw-r--r-- -jre/languages/R/library/nnet/R/nnet = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.rdx = rw-r--r-- -jre/languages/R/library/nnet/R/zzz.R = rw-r--r-- -jre/languages/R/library/nnet/R/multinom.R = rw-r--r-- -jre/languages/R/library/nnet/R/vcovmultinom.R = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.rdb = rw-r--r-- -jre/languages/R/library/nnet/Meta/links.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/features.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/package.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/nnet/html/R.css = rw-r--r-- -jre/languages/R/library/nnet/html/00Index.html = rw-r--r-- -jre/languages/R/library/nnet/libs/nnet.so = rwxr-xr-x -jre/languages/R/library/nnet/po/pl/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/en@quot/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/de/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/ko/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/fr/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/help/AnIndex = rw-r--r-- -jre/languages/R/library/nnet/help/aliases.rds = rw-r--r-- -jre/languages/R/library/nnet/help/paths.rds = rw-r--r-- -jre/languages/R/library/nnet/help/nnet.rdx = rw-r--r-- -jre/languages/R/library/nnet/help/nnet.rdb = rw-r--r-- -jre/languages/R/library/utils/iconvlist = rw-r--r-- -jre/languages/R/library/utils/NAMESPACE = rw-r--r-- -jre/languages/R/library/utils/DESCRIPTION = rw-r--r-- -jre/languages/R/library/utils/INDEX = rw-r--r-- -jre/languages/R/library/utils/misc/exDIF.dif = rw-r--r-- -jre/languages/R/library/utils/misc/exDIF.csv = rw-r--r-- -jre/languages/R/library/utils/R/utils = rw-r--r-- -jre/languages/R/library/utils/R/sysdata.rdb = rw-r--r-- -jre/languages/R/library/utils/R/sysdata.rdx = rw-r--r-- -jre/languages/R/library/utils/R/utils.rdx = rw-r--r-- -jre/languages/R/library/utils/R/utils.rdb = rw-r--r-- -jre/languages/R/library/utils/Meta/links.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/features.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/package.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/utils/html/R.css = rw-r--r-- -jre/languages/R/library/utils/html/00Index.html = rw-r--r-- -jre/languages/R/library/utils/libs/utils.so = rwxr-xr-x -jre/languages/R/library/utils/Sweave/Sweave-test-1.Rnw = rw-r--r-- -jre/languages/R/library/utils/Sweave/example-1.Rnw = rw-r--r-- -jre/languages/R/library/utils/doc/Sweave.pdf = rw-r--r-- -jre/languages/R/library/utils/help/AnIndex = rw-r--r-- -jre/languages/R/library/utils/help/aliases.rds = rw-r--r-- -jre/languages/R/library/utils/help/paths.rds = rw-r--r-- -jre/languages/R/library/utils/help/utils.rdx = rw-r--r-- -jre/languages/R/library/utils/help/utils.rdb = rw-r--r-- -jre/languages/R/library/stats4/NAMESPACE = rw-r--r-- -jre/languages/R/library/stats4/DESCRIPTION = rw-r--r-- -jre/languages/R/library/stats4/INDEX = rw-r--r-- -jre/languages/R/library/stats4/R/stats4 = rw-r--r-- -jre/languages/R/library/stats4/R/stats4.rdx = rw-r--r-- -jre/languages/R/library/stats4/R/stats4.rdb = rw-r--r-- -jre/languages/R/library/stats4/Meta/links.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/features.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/package.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/stats4/html/R.css = rw-r--r-- -jre/languages/R/library/stats4/html/00Index.html = rw-r--r-- -jre/languages/R/library/stats4/help/AnIndex = rw-r--r-- -jre/languages/R/library/stats4/help/aliases.rds = rw-r--r-- -jre/languages/R/library/stats4/help/paths.rds = rw-r--r-- -jre/languages/R/library/stats4/help/stats4.rdx = rw-r--r-- -jre/languages/R/library/stats4/help/stats4.rdb = rw-r--r-- -jre/languages/R/library/rpart/NEWS.Rd = rw-r--r-- -jre/languages/R/library/rpart/NAMESPACE = rw-r--r-- -jre/languages/R/library/rpart/DESCRIPTION = rw-r--r-- -jre/languages/R/library/rpart/INDEX = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.exp.R = rw-r--r-- -jre/languages/R/library/rpart/R/predict.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.class.R = rw-r--r-- -jre/languages/R/library/rpart/R/post.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpartco.R = rw-r--r-- -jre/languages/R/library/rpart/R/plotcp.R = rw-r--r-- -jre/languages/R/library/rpart/R/path.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/prune.R = rw-r--r-- -jre/languages/R/library/rpart/R/labels.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/pred.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/xpred.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/na.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/snip.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.anova.R = rw-r--r-- -jre/languages/R/library/rpart/R/text.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.control.R = rw-r--r-- -jre/languages/R/library/rpart/R/printcp.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.poisson.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart = rw-r--r-- -jre/languages/R/library/rpart/R/rsq.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/formatg.R = rw-r--r-- -jre/languages/R/library/rpart/R/prune.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.branch.R = rw-r--r-- -jre/languages/R/library/rpart/R/roc.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/snip.rpart.mouse.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.rdx = rw-r--r-- -jre/languages/R/library/rpart/R/meanvar.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.rdb = rw-r--r-- -jre/languages/R/library/rpart/R/post.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/zzz.R = rw-r--r-- -jre/languages/R/library/rpart/R/summary.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpartcallback.R = rw-r--r-- -jre/languages/R/library/rpart/R/importance.R = rw-r--r-- -jre/languages/R/library/rpart/R/residuals.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.matrix.R = rw-r--r-- -jre/languages/R/library/rpart/R/model.frame.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/print.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/plot.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/data.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/links.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/features.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/package.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/rpart/html/R.css = rw-r--r-- -jre/languages/R/library/rpart/html/00Index.html = rw-r--r-- -jre/languages/R/library/rpart/libs/rpart.so = rwxr-xr-x -jre/languages/R/library/rpart/po/pl/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/pl/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ru/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ru/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/en@quot/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/en@quot/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/de/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/de/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ko/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ko/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/fr/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/fr/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/doc/index.html = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.R = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.Rnw = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.pdf = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.Rnw = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.pdf = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.R = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/rpart/help/AnIndex = rw-r--r-- -jre/languages/R/library/rpart/help/aliases.rds = rw-r--r-- -jre/languages/R/library/rpart/help/paths.rds = rw-r--r-- -jre/languages/R/library/rpart/help/rpart.rdx = rw-r--r-- -jre/languages/R/library/rpart/help/rpart.rdb = rw-r--r-- -jre/languages/R/library/lattice/CITATION = rw-r--r-- -jre/languages/R/library/lattice/NAMESPACE = rw-r--r-- -jre/languages/R/library/lattice/DESCRIPTION = rw-r--r-- -jre/languages/R/library/lattice/NEWS = rw-r--r-- -jre/languages/R/library/lattice/INDEX = rw-r--r-- -jre/languages/R/library/lattice/demo/intervals.R = rw-r--r-- -jre/languages/R/library/lattice/demo/panel.R = rw-r--r-- -jre/languages/R/library/lattice/demo/lattice.R = rw-r--r-- -jre/languages/R/library/lattice/demo/labels.R = rw-r--r-- -jre/languages/R/library/lattice/R/qq.R = rw-r--r-- -jre/languages/R/library/lattice/R/axis.R = rw-r--r-- -jre/languages/R/library/lattice/R/shingle.R = rw-r--r-- -jre/languages/R/library/lattice/R/settings.R = rw-r--r-- -jre/languages/R/library/lattice/R/summary.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/qqmath.R = rw-r--r-- -jre/languages/R/library/lattice/R/legend.R = rw-r--r-- -jre/languages/R/library/lattice/R/densityplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/panel.smoothscatter.R = rw-r--r-- -jre/languages/R/library/lattice/R/rfs.R = rw-r--r-- -jre/languages/R/library/lattice/R/interaction.R = rw-r--r-- -jre/languages/R/library/lattice/R/xyplot.ts.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice.rdb = rw-r--r-- -jre/languages/R/library/lattice/R/update.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/bwplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/cloud.R = rw-r--r-- -jre/languages/R/library/lattice/R/panel.superpose.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice.rdx = rw-r--r-- -jre/languages/R/library/lattice/R/panel.smooth.R = rw-r--r-- -jre/languages/R/library/lattice/R/levelplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice = rw-r--r-- -jre/languages/R/library/lattice/R/common.R = rw-r--r-- -jre/languages/R/library/lattice/R/panels.R = rw-r--r-- -jre/languages/R/library/lattice/R/layout.R = rw-r--r-- -jre/languages/R/library/lattice/R/miscellaneous.R = rw-r--r-- -jre/languages/R/library/lattice/R/make.groups.R = rw-r--r-- -jre/languages/R/library/lattice/R/histogram.R = rw-r--r-- -jre/languages/R/library/lattice/R/strip.R = rw-r--r-- -jre/languages/R/library/lattice/R/xyplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/scales.R = rw-r--r-- -jre/languages/R/library/lattice/R/zzz.R = rw-r--r-- -jre/languages/R/library/lattice/R/splom.R = rw-r--r-- -jre/languages/R/library/lattice/R/print.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/tmd.R = rw-r--r-- -jre/languages/R/library/lattice/R/parallel.R = rw-r--r-- -jre/languages/R/library/lattice/Meta/data.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/links.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/features.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/package.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/lattice/html/R.css = rw-r--r-- -jre/languages/R/library/lattice/html/00Index.html = rw-r--r-- -jre/languages/R/library/lattice/libs/lattice.so = rwxr-xr-x -jre/languages/R/library/lattice/po/pl/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/en@quot/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/de/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/ko/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/fr/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/lattice/help/AnIndex = rw-r--r-- -jre/languages/R/library/lattice/help/aliases.rds = rw-r--r-- -jre/languages/R/library/lattice/help/lattice.rdb = rw-r--r-- -jre/languages/R/library/lattice/help/lattice.rdx = rw-r--r-- -jre/languages/R/library/lattice/help/paths.rds = rw-r--r-- -jre/languages/R/library/nlme/CITATION = rw-r--r-- -jre/languages/R/library/nlme/NAMESPACE = rw-r--r-- -jre/languages/R/library/nlme/DESCRIPTION = rw-r--r-- -jre/languages/R/library/nlme/INDEX = rw-r--r-- -jre/languages/R/library/nlme/LICENCE = rw-r--r-- -jre/languages/R/library/nlme/mlbook/ch04.R = rw-r--r-- -jre/languages/R/library/nlme/mlbook/README = rw-r--r-- -jre/languages/R/library/nlme/mlbook/ch05.R = rw-r--r-- -jre/languages/R/library/nlme/R/gls.R = rw-r--r-- -jre/languages/R/library/nlme/R/simulate.R = rw-r--r-- -jre/languages/R/library/nlme/R/pdMat.R = rw-r--r-- -jre/languages/R/library/nlme/R/corStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/newFunc.R = rw-r--r-- -jre/languages/R/library/nlme/R/gnls.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.rdb = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.rdx = rw-r--r-- -jre/languages/R/library/nlme/R/VarCov.R = rw-r--r-- -jre/languages/R/library/nlme/R/lmList.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme = rw-r--r-- -jre/languages/R/library/nlme/R/reStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/newMethods.R = rw-r--r-- -jre/languages/R/library/nlme/R/zzMethods.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlsList.R = rw-r--r-- -jre/languages/R/library/nlme/R/VarCorr.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.R = rw-r--r-- -jre/languages/R/library/nlme/R/newGenerics.R = rw-r--r-- -jre/languages/R/library/nlme/R/lme.R = rw-r--r-- -jre/languages/R/library/nlme/R/varFunc.R = rw-r--r-- -jre/languages/R/library/nlme/R/modelStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/groupedData.R = rw-r--r-- -jre/languages/R/library/nlme/Meta/data.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/links.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/features.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/package.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/nlme/html/R.css = rw-r--r-- -jre/languages/R/library/nlme/html/00Index.html = rw-r--r-- -jre/languages/R/library/nlme/libs/nlme.so = rwxr-xr-x -jre/languages/R/library/nlme/po/pl/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/pl/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/en@quot/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/en@quot/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/de/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/de/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/ko/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/ko/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/fr/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/fr/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch03.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch04.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/runme.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/sims.rda = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch05.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch01.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch06.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch02.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch08.R = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/nlme/help/AnIndex = rw-r--r-- -jre/languages/R/library/nlme/help/aliases.rds = rw-r--r-- -jre/languages/R/library/nlme/help/nlme.rdb = rw-r--r-- -jre/languages/R/library/nlme/help/nlme.rdx = rw-r--r-- -jre/languages/R/library/nlme/help/paths.rds = rw-r--r-- -jre/languages/R/library/splines/NAMESPACE = rw-r--r-- -jre/languages/R/library/splines/DESCRIPTION = rw-r--r-- -jre/languages/R/library/splines/INDEX = rw-r--r-- -jre/languages/R/library/splines/R/splines = rw-r--r-- -jre/languages/R/library/splines/R/splines.rdb = rw-r--r-- -jre/languages/R/library/splines/R/splines.rdx = rw-r--r-- -jre/languages/R/library/splines/Meta/links.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/features.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/package.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/splines/html/R.css = rw-r--r-- -jre/languages/R/library/splines/html/00Index.html = rw-r--r-- -jre/languages/R/library/splines/libs/splines.so = rwxr-xr-x -jre/languages/R/library/splines/help/AnIndex = rw-r--r-- -jre/languages/R/library/splines/help/aliases.rds = rw-r--r-- -jre/languages/R/library/splines/help/paths.rds = rw-r--r-- -jre/languages/R/library/splines/help/splines.rdb = rw-r--r-- -jre/languages/R/library/splines/help/splines.rdx = rw-r--r-- -jre/languages/R/library/grDevices/NAMESPACE = rw-r--r-- -jre/languages/R/library/grDevices/DESCRIPTION = rw-r--r-- -jre/languages/R/library/grDevices/INDEX = rw-r--r-- -jre/languages/R/library/grDevices/demo/hclColors.R = rw-r--r-- -jre/languages/R/library/grDevices/demo/colors.R = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices.rdb = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices.rdx = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices = rw-r--r-- -jre/languages/R/library/grDevices/Meta/links.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/features.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/package.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/grDevices/html/R.css = rw-r--r-- -jre/languages/R/library/grDevices/html/00Index.html = rw-r--r-- -jre/languages/R/library/grDevices/icc/srgb = rw-r--r-- -jre/languages/R/library/grDevices/icc/srgb.flate = rw-r--r-- -jre/languages/R/library/grDevices/afm/cob_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvbo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvnbo___.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019064l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agd_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncb_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-Oblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/s050000l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkdi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/poi_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvno____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agw_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019043l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Roman.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvnb____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/sy______.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059013l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvo_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tii_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-Oblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncr_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010015l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Italic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/MustRead.html = rw-r--r-- -jre/languages/R/library/grDevices/afm/Symbol.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010033l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/com_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018015l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncbi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkd_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-BoldItalic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018032l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_regular_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059036l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/README = rw-r--r-- -jre/languages/R/library/grDevices/afm/cmti10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059033l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-Italic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agwo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvn_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-BoldOblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019063l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tibi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/coo_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/por_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agdo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_symbol_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ZapfDingbats.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/cobo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvb_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-BoldItalic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkli____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019044l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/pobi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tir_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018012l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkl_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/nci_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_boldx_italic_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hv______.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_italic_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059016l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/pob_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-BoldOblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010013l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/cmbxti10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tib_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018035l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_boldx_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010035l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/libs/grDevices.so = rwxr-xr-x -jre/languages/R/library/grDevices/enc/AdobeSym.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin7.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin2.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin1.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/Greek.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1257.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1250.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/TeXtext.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/PDFDoc.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1251.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1253.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/KOI8-U.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/Cyrillic.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/MacRoman.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/AdobeStd.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/KOI8-R.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin9.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/WinAnsi.enc = rw-r--r-- -jre/languages/R/library/grDevices/help/AnIndex = rw-r--r-- -jre/languages/R/library/grDevices/help/grDevices.rdb = rw-r--r-- -jre/languages/R/library/grDevices/help/grDevices.rdx = rw-r--r-- -jre/languages/R/library/grDevices/help/aliases.rds = rw-r--r-- -jre/languages/R/library/grDevices/help/paths.rds = rw-r--r-- -jre/languages/R/library/class/CITATION = rw-r--r-- -jre/languages/R/library/class/NAMESPACE = rw-r--r-- -jre/languages/R/library/class/DESCRIPTION = rw-r--r-- -jre/languages/R/library/class/NEWS = rw-r--r-- -jre/languages/R/library/class/INDEX = rw-r--r-- -jre/languages/R/library/class/R/class.rdb = rw-r--r-- -jre/languages/R/library/class/R/class.rdx = rw-r--r-- -jre/languages/R/library/class/R/multiedit.R = rw-r--r-- -jre/languages/R/library/class/R/SOM.R = rw-r--r-- -jre/languages/R/library/class/R/lvq.R = rw-r--r-- -jre/languages/R/library/class/R/class = rw-r--r-- -jre/languages/R/library/class/R/zzz.R = rw-r--r-- -jre/languages/R/library/class/R/knn.R = rw-r--r-- -jre/languages/R/library/class/Meta/links.rds = rw-r--r-- -jre/languages/R/library/class/Meta/features.rds = rw-r--r-- -jre/languages/R/library/class/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/class/Meta/package.rds = rw-r--r-- -jre/languages/R/library/class/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/class/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/class/html/R.css = rw-r--r-- -jre/languages/R/library/class/html/00Index.html = rw-r--r-- -jre/languages/R/library/class/libs/class.so = rwxr-xr-x -jre/languages/R/library/class/po/pl/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/en@quot/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/de/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/ko/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/fr/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/help/class.rdb = rw-r--r-- -jre/languages/R/library/class/help/class.rdx = rw-r--r-- -jre/languages/R/library/class/help/AnIndex = rw-r--r-- -jre/languages/R/library/class/help/aliases.rds = rw-r--r-- -jre/languages/R/library/class/help/paths.rds = rw-r--r-- -jre/languages/R/library/codetools/NAMESPACE = rw-r--r-- -jre/languages/R/library/codetools/DESCRIPTION = rw-r--r-- -jre/languages/R/library/codetools/INDEX = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.rdx = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.R = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.rdb = rw-r--r-- -jre/languages/R/library/codetools/R/codetools = rw-r--r-- -jre/languages/R/library/codetools/Meta/links.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/features.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/package.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/codetools/html/R.css = rw-r--r-- -jre/languages/R/library/codetools/html/00Index.html = rw-r--r-- -jre/languages/R/library/codetools/help/AnIndex = rw-r--r-- -jre/languages/R/library/codetools/help/codetools.rdx = rw-r--r-- -jre/languages/R/library/codetools/help/codetools.rdb = rw-r--r-- -jre/languages/R/library/codetools/help/aliases.rds = rw-r--r-- -jre/languages/R/library/codetools/help/paths.rds = rw-r--r-- -jre/languages/R/library/spatial/CITATION = rw-r--r-- -jre/languages/R/library/spatial/PP.files = rw-r--r-- -jre/languages/R/library/spatial/NAMESPACE = rw-r--r-- -jre/languages/R/library/spatial/DESCRIPTION = rw-r--r-- -jre/languages/R/library/spatial/NEWS = rw-r--r-- -jre/languages/R/library/spatial/INDEX = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig1c.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/davis.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig1b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/cells.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pines.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/caveolae.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pereg.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/hccells.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/agter.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/eagles.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/tokyo.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/grocery.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/drumlin.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pairfn.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/nztrees.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig2a.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/redwood.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig2b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/towns.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/stowns1.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3c.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/schools.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3a.dat = rw-r--r-- -jre/languages/R/library/spatial/R/kr.R = rw-r--r-- -jre/languages/R/library/spatial/R/zzz.R = rw-r--r-- -jre/languages/R/library/spatial/R/spatial = rw-r--r-- -jre/languages/R/library/spatial/R/spatial.rdb = rw-r--r-- -jre/languages/R/library/spatial/R/spatial.rdx = rw-r--r-- -jre/languages/R/library/spatial/R/pp.R = rw-r--r-- -jre/languages/R/library/spatial/Meta/links.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/features.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/package.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/spatial/html/R.css = rw-r--r-- -jre/languages/R/library/spatial/html/00Index.html = rw-r--r-- -jre/languages/R/library/spatial/libs/spatial.so = rwxr-xr-x -jre/languages/R/library/spatial/po/pl/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/en@quot/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/de/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/ko/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/fr/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/help/AnIndex = rw-r--r-- -jre/languages/R/library/spatial/help/aliases.rds = rw-r--r-- -jre/languages/R/library/spatial/help/paths.rds = rw-r--r-- -jre/languages/R/library/spatial/help/spatial.rdb = rw-r--r-- -jre/languages/R/library/spatial/help/spatial.rdx = rw-r--r-- -jre/languages/R/library/graphics/NAMESPACE = rw-r--r-- -jre/languages/R/library/graphics/DESCRIPTION = rw-r--r-- -jre/languages/R/library/graphics/INDEX = rw-r--r-- -jre/languages/R/library/graphics/demo/Japanese.R = rw-r--r-- -jre/languages/R/library/graphics/demo/plotmath.R = rw-r--r-- -jre/languages/R/library/graphics/demo/persp.R = rw-r--r-- -jre/languages/R/library/graphics/demo/graphics.R = rw-r--r-- -jre/languages/R/library/graphics/demo/image.R = rw-r--r-- -jre/languages/R/library/graphics/demo/Hershey.R = rw-r--r-- -jre/languages/R/library/graphics/R/graphics.rdb = rw-r--r-- -jre/languages/R/library/graphics/R/graphics.rdx = rw-r--r-- -jre/languages/R/library/graphics/R/graphics = rw-r--r-- -jre/languages/R/library/graphics/Meta/links.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/features.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/package.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/graphics/html/R.css = rw-r--r-- -jre/languages/R/library/graphics/html/00Index.html = rw-r--r-- -jre/languages/R/library/graphics/libs/graphics.so = rwxr-xr-x -jre/languages/R/library/graphics/help/AnIndex = rw-r--r-- -jre/languages/R/library/graphics/help/aliases.rds = rw-r--r-- -jre/languages/R/library/graphics/help/graphics.rdb = rw-r--r-- -jre/languages/R/library/graphics/help/graphics.rdx = rw-r--r-- -jre/languages/R/library/graphics/help/paths.rds = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.svg = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.pdf = rw-r--r-- -jre/languages/R/library/graphics/help/figures/oma.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/oma.pdf = rw-r--r-- -jre/languages/R/library/graphics/help/figures/mai.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/mai.pdf = rw-r--r-- -jre/languages/R/library/foreign/COPYRIGHTS = rw-r--r-- -jre/languages/R/library/foreign/NAMESPACE = rw-r--r-- -jre/languages/R/library/foreign/DESCRIPTION = rw-r--r-- -jre/languages/R/library/foreign/INDEX = rw-r--r-- -jre/languages/R/library/foreign/R/read.dta.R = rw-r--r-- -jre/languages/R/library/foreign/R/read.ssd.R = rw-r--r-- -jre/languages/R/library/foreign/R/minitab.R = rw-r--r-- -jre/languages/R/library/foreign/R/dbf.R = rw-r--r-- -jre/languages/R/library/foreign/R/octave.R = rw-r--r-- -jre/languages/R/library/foreign/R/spss.R = rw-r--r-- -jre/languages/R/library/foreign/R/R_systat.R = rw-r--r-- -jre/languages/R/library/foreign/R/xport.R = rw-r--r-- -jre/languages/R/library/foreign/R/zzz.R = rw-r--r-- -jre/languages/R/library/foreign/R/read.epiinfo.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign.rdb = rw-r--r-- -jre/languages/R/library/foreign/R/Sread.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign.rdx = rw-r--r-- -jre/languages/R/library/foreign/R/arff.R = rw-r--r-- -jre/languages/R/library/foreign/R/writeForeignSAS.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign = rw-r--r-- -jre/languages/R/library/foreign/R/writeForeignCode.R = rw-r--r-- -jre/languages/R/library/foreign/Meta/links.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/features.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/package.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/foreign/html/R.css = rw-r--r-- -jre/languages/R/library/foreign/html/00Index.html = rw-r--r-- -jre/languages/R/library/foreign/libs/foreign.so = rwxr-xr-x -jre/languages/R/library/foreign/po/pl/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/pl/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/en@quot/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/en@quot/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/de/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/de/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/fr/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/fr/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/files/electric.sav = rw-r--r-- -jre/languages/R/library/foreign/files/Iris.syd = rw-r--r-- -jre/languages/R/library/foreign/files/testdata.sav = rw-r--r-- -jre/languages/R/library/foreign/files/HillRace.SYD = rw-r--r-- -jre/languages/R/library/foreign/files/sids.dbf = rwxr-xr-x -jre/languages/R/library/foreign/help/AnIndex = rw-r--r-- -jre/languages/R/library/foreign/help/aliases.rds = rw-r--r-- -jre/languages/R/library/foreign/help/paths.rds = rw-r--r-- -jre/languages/R/library/foreign/help/foreign.rdb = rw-r--r-- -jre/languages/R/library/foreign/help/foreign.rdx = rw-r--r-- -jre/languages/R/library/compiler/NAMESPACE = rw-r--r-- -jre/languages/R/library/compiler/DESCRIPTION = rw-r--r-- -jre/languages/R/library/compiler/INDEX = rw-r--r-- -jre/languages/R/library/compiler/R/compiler = rw-r--r-- -jre/languages/R/library/compiler/R/compiler.rdx = rw-r--r-- -jre/languages/R/library/compiler/R/compiler.rdb = rw-r--r-- -jre/languages/R/library/compiler/Meta/links.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/features.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/package.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/compiler/html/R.css = rw-r--r-- -jre/languages/R/library/compiler/html/00Index.html = rw-r--r-- -jre/languages/R/library/compiler/help/AnIndex = rw-r--r-- -jre/languages/R/library/compiler/help/aliases.rds = rw-r--r-- -jre/languages/R/library/compiler/help/paths.rds = rw-r--r-- -jre/languages/R/library/compiler/help/compiler.rdx = rw-r--r-- -jre/languages/R/library/compiler/help/compiler.rdb = rw-r--r-- -jre/languages/R/library/Matrix/Copyrights = rw-r--r-- -jre/languages/R/library/Matrix/NEWS.Rd = rw-r--r-- -jre/languages/R/library/Matrix/test-tools-1.R = rw-r--r-- -jre/languages/R/library/Matrix/NAMESPACE = rw-r--r-- -jre/languages/R/library/Matrix/DESCRIPTION = rw-r--r-- -jre/languages/R/library/Matrix/INDEX = rw-r--r-- -jre/languages/R/library/Matrix/test-tools-Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/Doxyfile = rw-r--r-- -jre/languages/R/library/Matrix/test-tools.R = rw-r--r-- -jre/languages/R/library/Matrix/LICENCE = rw-r--r-- -jre/languages/R/library/Matrix/include/Matrix.h = rw-r--r-- -jre/languages/R/library/Matrix/include/Matrix_stubs.c = rw-r--r-- -jre/languages/R/library/Matrix/include/cholmod.h = rw-r--r-- -jre/languages/R/library/Matrix/R/expm.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Auxiliaries.R = rw-r--r-- -jre/languages/R/library/Matrix/R/corMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ngTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/rankMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ndenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/SparseM-conv.R = rw-r--r-- -jre/languages/R/library/Matrix/R/indMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseQR.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Tsparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ntCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/spModels.R = rw-r--r-- -jre/languages/R/library/Matrix/R/LU.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dppMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/AllClass.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Csparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/pMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ntTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/MatrixFactorization.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ddenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/AllGeneric.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/kronecker.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.rdb = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.rdx = rw-r--r-- -jre/languages/R/library/Matrix/R/not.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ngCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dpoMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/denseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/triangularMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/KhatriRao.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtrMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dspMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/bind2.R = rw-r--r-- -jre/languages/R/library/Matrix/R/abIndex.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsyMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/condest.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Rsparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lgTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/eigen.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Math.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseVector.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgeMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nnzero.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ltCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/zzz.R = rw-r--r-- -jre/languages/R/library/Matrix/R/CHMfactor.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Hilbert.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ltTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Ops.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/diagMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix = rw-r--r-- -jre/languages/R/library/Matrix/R/nearPD.R = rw-r--r-- -jre/languages/R/library/Matrix/R/products.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtpMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/colSums.R = rw-r--r-- -jre/languages/R/library/Matrix/R/HBMM.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Summary.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ldenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/bandSparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lgCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/symmetricMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/data.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/links.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/features.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/package.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/Matrix/html/R.css = rw-r--r-- -jre/languages/R/library/Matrix/html/00Index.html = rw-r--r-- -jre/languages/R/library/Matrix/libs/Matrix.so = rwxr-xr-x -jre/languages/R/library/Matrix/po/pl/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/pl/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/en@quot/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/en@quot/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/de/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/de/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/ko/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/fr/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/fr/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/doc/index.html = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Announce.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/SPQR.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/CHOLMOD.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/SuiteSparse_config.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/UserGuides.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/AMD.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/COLAMD.txt = rw-r--r-- -jre/languages/R/library/Matrix/external/lund_a.rsa = rw-r--r-- -jre/languages/R/library/Matrix/external/CAex_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/test3comp.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/utm300.rua = rw-r--r-- -jre/languages/R/library/Matrix/external/USCounties_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/lund_a.mtx = rw-r--r-- -jre/languages/R/library/Matrix/external/wrong.mtx = rw-r--r-- -jre/languages/R/library/Matrix/external/symA.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/KNex_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/symW.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/pores_1.mtx = rw-r--r-- -jre/languages/R/library/Matrix/data/KNex.R = rw-r--r-- -jre/languages/R/library/Matrix/data/CAex.R = rw-r--r-- -jre/languages/R/library/Matrix/data/USCounties.R = rw-r--r-- -jre/languages/R/library/Matrix/help/AnIndex = rw-r--r-- -jre/languages/R/library/Matrix/help/aliases.rds = rw-r--r-- -jre/languages/R/library/Matrix/help/Matrix.rdb = rw-r--r-- -jre/languages/R/library/Matrix/help/Matrix.rdx = rw-r--r-- -jre/languages/R/library/Matrix/help/paths.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/NAMESPACE = rw-r--r-- -jre/languages/R/library/KernSmooth/DESCRIPTION = rw-r--r-- -jre/languages/R/library/KernSmooth/INDEX = rw-r--r-- -jre/languages/R/library/KernSmooth/R/all.R = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth.rdb = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth.rdx = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/links.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/features.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/package.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/html/R.css = rw-r--r-- -jre/languages/R/library/KernSmooth/html/00Index.html = rw-r--r-- -jre/languages/R/library/KernSmooth/libs/KernSmooth.so = rwxr-xr-x -jre/languages/R/library/KernSmooth/po/pl/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/en@quot/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/de/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/ko/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/fr/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/help/AnIndex = rw-r--r-- -jre/languages/R/library/KernSmooth/help/aliases.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/help/paths.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/help/KernSmooth.rdb = rw-r--r-- -jre/languages/R/library/KernSmooth/help/KernSmooth.rdx = rw-r--r-- -jre/languages/R/library/base/CITATION = rw-r--r-- -jre/languages/R/library/base/DESCRIPTION = rw-r--r-- -jre/languages/R/library/base/INDEX = rw-r--r-- -jre/languages/R/library/base/demo/scoping.R = rw-r--r-- -jre/languages/R/library/base/demo/error.catching.R = rw-r--r-- -jre/languages/R/library/base/demo/is.things.R = rw-r--r-- -jre/languages/R/library/base/demo/recursion.R = rw-r--r-- -jre/languages/R/library/base/R/Rprofile = rw-r--r-- -jre/languages/R/library/base/R/base.rdx = rw-r--r-- -jre/languages/R/library/base/R/base.rdb = rw-r--r-- -jre/languages/R/library/base/R/base = rw-r--r-- -jre/languages/R/library/base/Meta/links.rds = rw-r--r-- -jre/languages/R/library/base/Meta/features.rds = rw-r--r-- -jre/languages/R/library/base/Meta/package.rds = rw-r--r-- -jre/languages/R/library/base/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/base/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/base/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/base/html/R.css = rw-r--r-- -jre/languages/R/library/base/html/00Index.html = rw-r--r-- -jre/languages/R/library/base/libs/base.so = rwxr-xr-x -jre/languages/R/library/base/help/AnIndex = rw-r--r-- -jre/languages/R/library/base/help/aliases.rds = rw-r--r-- -jre/languages/R/library/base/help/paths.rds = rw-r--r-- -jre/languages/R/library/base/help/base.rdx = rw-r--r-- -jre/languages/R/library/base/help/base.rdb = rw-r--r-- -jre/languages/R/library/stats/COPYRIGHTS.modreg = rw-r--r-- -jre/languages/R/library/stats/NAMESPACE = rw-r--r-- -jre/languages/R/library/stats/SOURCES.ts = rw-r--r-- -jre/languages/R/library/stats/DESCRIPTION = rw-r--r-- -jre/languages/R/library/stats/INDEX = rw-r--r-- -jre/languages/R/library/stats/demo/smooth.R = rw-r--r-- -jre/languages/R/library/stats/demo/lm.glm.R = rw-r--r-- -jre/languages/R/library/stats/demo/nlm.R = rw-r--r-- -jre/languages/R/library/stats/demo/glm.vr.R = rw-r--r-- -jre/languages/R/library/stats/R/stats.rdx = rw-r--r-- -jre/languages/R/library/stats/R/stats.rdb = rw-r--r-- -jre/languages/R/library/stats/R/stats = rw-r--r-- -jre/languages/R/library/stats/Meta/links.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/features.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/package.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/stats/html/R.css = rw-r--r-- -jre/languages/R/library/stats/html/00Index.html = rw-r--r-- -jre/languages/R/library/stats/libs/stats.so = rwxr-xr-x -jre/languages/R/library/stats/help/AnIndex = rw-r--r-- -jre/languages/R/library/stats/help/aliases.rds = rw-r--r-- -jre/languages/R/library/stats/help/stats.rdx = rw-r--r-- -jre/languages/R/library/stats/help/paths.rds = rw-r--r-- -jre/languages/R/library/stats/help/stats.rdb = rw-r--r-- -jre/languages/R/library/survival/CITATION = rw-r--r-- -jre/languages/R/library/survival/COPYRIGHTS = rw-r--r-- -jre/languages/R/library/survival/NEWS.Rd = rw-r--r-- -jre/languages/R/library/survival/NAMESPACE = rw-r--r-- -jre/languages/R/library/survival/DESCRIPTION = rw-r--r-- -jre/languages/R/library/survival/INDEX = rw-r--r-- -jre/languages/R/library/survival/R/print.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/plot.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cluster.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gamma.S = rw-r--r-- -jre/languages/R/library/survival/R/aareg.taper.R = rw-r--r-- -jre/languages/R/library/survival/R/survival.rdb = rw-r--r-- -jre/languages/R/library/survival/R/pspline.R = rw-r--r-- -jre/languages/R/library/survival/R/plot.survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/print.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/survival.rdx = rw-r--r-- -jre/languages/R/library/survival/R/coxph.getdata.S = rw-r--r-- -jre/languages/R/library/survival/R/coxph.rvar.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlgam.S = rw-r--r-- -jre/languages/R/library/survival/R/survfit.matrix.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survfit.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.cfit.R = rw-r--r-- -jre/languages/R/library/survival/R/survobrien.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/tmerge.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxph.penal.R = rw-r--r-- -jre/languages/R/library/survival/R/plot.cox.zph.S = rw-r--r-- -jre/languages/R/library/survival/R/basehaz.R = rw-r--r-- -jre/languages/R/library/survival/R/format.Surv.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/normalizetime.R = rw-r--r-- -jre/languages/R/library/survival/R/survfit.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/residuals.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gammacon.S = rw-r--r-- -jre/languages/R/library/survival/R/is.na.coxph.penalty.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cch.R = rw-r--r-- -jre/languages/R/library/survival/R/lines.survfit.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/anova.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/is.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/statefig.R = rw-r--r-- -jre/languages/R/library/survival/R/survreg.control.S = rw-r--r-- -jre/languages/R/library/survival/R/survreg.distributions.S = rw-r--r-- -jre/languages/R/library/survival/R/ridge.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.null.S = rw-r--r-- -jre/languages/R/library/survival/R/pyears.R = rw-r--r-- -jre/languages/R/library/survival/R/summary.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/coxph.detail.S = rw-r--r-- -jre/languages/R/library/survival/R/print.pyears.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.wtest.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/survConcordance.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitTurnbull.S = rw-r--r-- -jre/languages/R/library/survival/R/survpenal.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/survfitCI.R = rw-r--r-- -jre/languages/R/library/survival/R/attrassign.R = rw-r--r-- -jre/languages/R/library/survival/R/ratetableold.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survfitms.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.brent.S = rw-r--r-- -jre/languages/R/library/survival/R/match.ratetable.R = rwxr-xr-x -jre/languages/R/library/survival/R/firstlib.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitcoxph.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/cipoisson.R = rw-r--r-- -jre/languages/R/library/survival/R/predict.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/lines.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlgauss.S = rw-r--r-- -jre/languages/R/library/survival/R/print.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.S = rw-r--r-- -jre/languages/R/library/survival/R/strata.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/predict.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/yates.R = rw-r--r-- -jre/languages/R/library/survival/R/neardate.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survdiff.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/coxpenal.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/agexact.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/model.matrix.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/model.frame.survreg.R = rw-r--r-- -jre/languages/R/library/survival/R/lines.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cox.zph.S = rw-r--r-- -jre/languages/R/library/survival/R/survfitms.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gaussian.S = rw-r--r-- -jre/languages/R/library/survival/R/ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlaic.S = rw-r--r-- -jre/languages/R/library/survival/R/tcut.S = rw-r--r-- -jre/languages/R/library/survival/R/dsurvreg.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/clogit.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survexp.S = rw-r--r-- -jre/languages/R/library/survival/R/Surv.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitKM.S = rw-r--r-- -jre/languages/R/library/survival/R/survreg.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.t.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survfit.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/survdiff.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/aeqSurv.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxphlist.S = rw-r--r-- -jre/languages/R/library/survival/R/finegray.R = rw-r--r-- -jre/languages/R/library/survival/R/summary.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/coxpenal.df.S = rw-r--r-- -jre/languages/R/library/survival/R/ratetableDate.R = rw-r--r-- -jre/languages/R/library/survival/R/predict.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/agreg.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.survreglist.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.null.S = rw-r--r-- -jre/languages/R/library/survival/R/quantile.survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/coxexact.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/untangle.specials.S = rw-r--r-- -jre/languages/R/library/survival/R/predict.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/survConcordance.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/agsurv.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controldf.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.survreg.R = rw-r--r-- -jre/languages/R/library/survival/R/survcallback.S = rw-r--r-- -jre/languages/R/library/survival/R/logLik.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/survSplit.R = rw-r--r-- -jre/languages/R/library/survival/R/labels.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/survival = rw-r--r-- -jre/languages/R/library/survival/R/survregDtest.S = rw-r--r-- -jre/languages/R/library/survival/R/xtras.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.control.S = rw-r--r-- -jre/languages/R/library/survival/R/survdiff.fit.S = rw-r--r-- -jre/languages/R/library/survival/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/data.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/links.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/features.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/package.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/survival/html/R.css = rw-r--r-- -jre/languages/R/library/survival/html/00Index.html = rw-r--r-- -jre/languages/R/library/survival/libs/survival.so = rwxr-xr-x -jre/languages/R/library/survival/doc/adjcurve.R = rw-r--r-- -jre/languages/R/library/survival/doc/adjcurve.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/adjcurve.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/index.html = rw-r--r-- -jre/languages/R/library/survival/doc/tests.R = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/multi.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/multi.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/population.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/population.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.R = rw-r--r-- -jre/languages/R/library/survival/doc/population.R = rw-r--r-- -jre/languages/R/library/survival/doc/tests.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/tests.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/compete.R = rw-r--r-- -jre/languages/R/library/survival/doc/compete.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/compete.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.R = rw-r--r-- -jre/languages/R/library/survival/doc/validate.R = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.R = rw-r--r-- -jre/languages/R/library/survival/doc/validate.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/validate.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/multi.R = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/survival/help/survival.rdb = rw-r--r-- -jre/languages/R/library/survival/help/survival.rdx = rw-r--r-- -jre/languages/R/library/survival/help/AnIndex = rw-r--r-- -jre/languages/R/library/survival/help/aliases.rds = rw-r--r-- -jre/languages/R/library/survival/help/paths.rds = rw-r--r-- -jre/languages/R/library/grid/NAMESPACE = rw-r--r-- -jre/languages/R/library/grid/DESCRIPTION = rw-r--r-- -jre/languages/R/library/grid/INDEX = rw-r--r-- -jre/languages/R/library/grid/R/grid.rdb = rw-r--r-- -jre/languages/R/library/grid/R/grid.rdx = rw-r--r-- -jre/languages/R/library/grid/R/grid = rw-r--r-- -jre/languages/R/library/grid/Meta/links.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/features.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/package.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/grid/html/R.css = rw-r--r-- -jre/languages/R/library/grid/html/00Index.html = rw-r--r-- -jre/languages/R/library/grid/libs/grid.so = rwxr-xr-x -jre/languages/R/library/grid/doc/moveline.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/plotexample.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/saveload.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/displaylist.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/viewports.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/interactive.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/grid.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/DivByZero.txt = rw-r--r-- -jre/languages/R/library/grid/doc/rotated.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/changes.txt = rw-r--r-- -jre/languages/R/library/grid/doc/locndimn.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/frame.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/nonfinite.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/sharing.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/grobs.pdf = rw-r--r-- -jre/languages/R/library/grid/help/AnIndex = rw-r--r-- -jre/languages/R/library/grid/help/aliases.rds = rw-r--r-- -jre/languages/R/library/grid/help/grid.rdb = rw-r--r-- -jre/languages/R/library/grid/help/grid.rdx = rw-r--r-- -jre/languages/R/library/grid/help/paths.rds = rw-r--r-- -jre/languages/R/etc/edMakeconf.etc.llvm = rw-r--r-- -jre/languages/R/etc/native-packages = rw-r--r-- -jre/languages/R/etc/configure.ac = rw-r--r-- -jre/languages/R/etc/Makeconf.in = rw-r--r-- -jre/languages/R/etc/ldpaths = rw-r--r-- -jre/languages/R/etc/DEFAULT_CRAN_MIRROR = rw-r--r-- -jre/languages/R/etc/configure = rwxr-xr-x -jre/languages/R/etc/ffibuildtype = rw-r--r-- -jre/languages/R/etc/repositories = rw-r--r-- -jre/languages/R/etc/Renviron.in = rw-r--r-- -jre/languages/R/etc/ldpaths.in = rw-r--r-- -jre/languages/R/etc/VERSION = rw-r--r-- -jre/languages/R/etc/Makeconf = rw-r--r-- -jre/languages/R/etc/Renviron = rw-r--r-- -jre/languages/R/etc/edMakeconf.etc = rw-r--r-- -jre/languages/R/etc/javaconf = rw-r--r-- -jre/languages/R/etc/tools/GETVERSION = rw-r--r-- -jre/languages/R/etc/tools/ldAIX4 = rw-r--r-- -jre/languages/R/etc/tools/copy-if-change = rw-r--r-- -jre/languages/R/etc/tools/install-sh = rwxr-xr-x -jre/languages/R/etc/tools/help2man.pl = rw-r--r-- -jre/languages/R/etc/tools/config.rpath = rwxr-xr-x -jre/languages/R/etc/tools/ltmain.sh = rw-r--r-- -jre/languages/R/etc/tools/link-recommended = rwxr-xr-x -jre/languages/R/etc/tools/Makefile = rw-r--r-- -jre/languages/R/etc/tools/config.guess = rwxr-xr-x -jre/languages/R/etc/tools/missing = rwxr-xr-x -jre/languages/R/etc/tools/README = rw-r--r-- -jre/languages/R/etc/tools/GETCONFIG = rw-r--r-- -jre/languages/R/etc/tools/config.sub = rwxr-xr-x -jre/languages/R/etc/tools/GETMAKEVAL = rwxr-xr-x -jre/languages/R/etc/tools/updatefat = rwxr-xr-x -jre/languages/R/etc/tools/install-info.pl = rw-r--r-- -jre/languages/R/etc/tools/move-if-change = rw-r--r-- -jre/languages/R/etc/tools/getsp.java = rw-r--r-- -jre/languages/R/etc/tools/Makefile.in = rw-r--r-- -jre/languages/R/etc/tools/rsync-recommended = rwxr-xr-x -jre/languages/R/etc/tools/GETDISTNAME = rwxr-xr-x -jre/languages/R/etc/tools/mdate-sh = rwxr-xr-x -jre/languages/R/etc/m4/ltversion.m4 = rw-r--r-- -jre/languages/R/etc/m4/libtool.m4 = rw-r--r-- -jre/languages/R/etc/m4/ltoptions.m4 = rw-r--r-- -jre/languages/R/etc/m4/cairo.m4 = rw-r--r-- -jre/languages/R/etc/m4/ltsugar.m4 = rw-r--r-- -jre/languages/R/etc/m4/Makefile = rw-r--r-- -jre/languages/R/etc/m4/stat-time.m4 = rw-r--r-- -jre/languages/R/etc/m4/README = rw-r--r-- -jre/languages/R/etc/m4/bigendian.m4 = rw-r--r-- -jre/languages/R/etc/m4/codeset.m4 = rw-r--r-- -jre/languages/R/etc/m4/gettext.m4 = rw-r--r-- -jre/languages/R/etc/m4/R.m4 = rw-r--r-- -jre/languages/R/etc/m4/cxx_11.m4 = rw-r--r-- -jre/languages/R/etc/m4/clibs.m4 = rw-r--r-- -jre/languages/R/etc/m4/gettext-lib.m4 = rw-r--r-- -jre/languages/R/etc/m4/Makefile.in = rw-r--r-- -jre/languages/R/etc/m4/lt~obsolete.m4 = rw-r--r-- -jre/languages/R/etc/m4/openmp.m4 = rw-r--r-- -jre/languages/R/etc/src/include/config.h.in = rw-r--r-- -jre/languages/R/share/encodings/character-sets = rw-r--r-- -jre/languages/R/share/encodings/Adobe-glyphlist = rw-r--r-- -jre/languages/R/share/R/tests-startup.R = rw-r--r-- -jre/languages/R/share/R/examples-header.R = rw-r--r-- -jre/languages/R/share/R/examples-footer.R = rw-r--r-- -jre/languages/R/share/R/REMOVE.R = rw-r--r-- -jre/languages/R/share/R/nspackloader.R = rw-r--r-- -jre/languages/R/share/java/README = rw-r--r-- -jre/languages/R/share/java/getsp.class = rw-r--r-- -jre/languages/R/share/make/shlib.mk = rw-r--r-- -jre/languages/R/share/make/check_vars_ini.mk = rw-r--r-- -jre/languages/R/share/make/lazycomp.mk = rw-r--r-- -jre/languages/R/share/make/winshlib.mk = rw-r--r-- -jre/languages/R/share/make/config.mk = rw-r--r-- -jre/languages/R/share/make/clean.mk = rw-r--r-- -jre/languages/R/share/make/vars.mk = rw-r--r-- -jre/languages/R/share/make/basepkg.mk = rw-r--r-- -jre/languages/R/share/make/check_vars_out.mk = rw-r--r-- -jre/languages/R/share/Rd/macros/system.Rd = rw-r--r-- -jre/languages/R/doc/COPYRIGHTS = rw-r--r-- -jre/languages/R/doc/BioC_mirrors.csv = rw-r--r-- -jre/languages/R/doc/NEWS.Rd = rw-r--r-- -jre/languages/R/doc/NEWS.pdf = rw-r--r-- -jre/languages/R/doc/R.aux = rw-r--r-- -jre/languages/R/doc/AUTHORS = rw-r--r-- -jre/languages/R/doc/Makefile = rw-r--r-- -jre/languages/R/doc/FAQ = rw-r--r-- -jre/languages/R/doc/RESOURCES = rw-r--r-- -jre/languages/R/doc/Rscript.1 = rw-r--r-- -jre/languages/R/doc/CRAN_mirrors.csv = rw-r--r-- -jre/languages/R/doc/NEWS.2 = rw-r--r-- -jre/languages/R/doc/COPYING = rw-r--r-- -jre/languages/R/doc/NEWS.rds = rw-r--r-- -jre/languages/R/doc/NEWS = rw-r--r-- -jre/languages/R/doc/NEWS.2.Rd = rw-r--r-- -jre/languages/R/doc/THANKS = rw-r--r-- -jre/languages/R/doc/KEYWORDS = rw-r--r-- -jre/languages/R/doc/Makefile.in = rw-r--r-- -jre/languages/R/doc/Makefile.win = rw-r--r-- -jre/languages/R/doc/R.1 = rw-r--r-- -jre/languages/R/doc/NEWS.0 = rw-r--r-- -jre/languages/R/doc/KEYWORDS.db = rw-r--r-- -jre/languages/R/doc/NEWS.1 = rw-r--r-- -jre/languages/R/doc/html/favicon.ico = rw-r--r-- -jre/languages/R/doc/html/index.html = rw-r--r-- -jre/languages/R/doc/html/about.html = rw-r--r-- -jre/languages/R/doc/html/up.jpg = rw-r--r-- -jre/languages/R/doc/html/Makefile = rw-r--r-- -jre/languages/R/doc/html/packages.html = rw-r--r-- -jre/languages/R/doc/html/NEWS.2.html = rw-r--r-- -jre/languages/R/doc/html/R-admin.html = rw-r--r-- -jre/languages/R/doc/html/index-default.html = rw-r--r-- -jre/languages/R/doc/html/NEWS.html = rw-r--r-- -jre/languages/R/doc/html/resources.html = rw-r--r-- -jre/languages/R/doc/html/left.jpg = rw-r--r-- -jre/languages/R/doc/html/Notes = rw-r--r-- -jre/languages/R/doc/html/logo.jpg = rw-r--r-- -jre/languages/R/doc/html/R.css = rw-r--r-- -jre/languages/R/doc/html/Rlogo.svg = rw-r--r-- -jre/languages/R/doc/html/Search.html = rw-r--r-- -jre/languages/R/doc/html/Rlogo.pdf = rw-r--r-- -jre/languages/R/doc/html/SearchOn.html = rw-r--r-- -jre/languages/R/doc/html/Makefile.in = rw-r--r-- -jre/languages/R/doc/html/right.jpg = rw-r--r-- -jre/languages/R/doc/html/packages-head-utf8.html = rw-r--r-- -jre/languages/R/doc/manual/R-exts.texi = rw-r--r-- -jre/languages/R/doc/manual/pdfcolor.tex = rw-r--r-- -jre/languages/R/doc/manual/refman.top = rw-r--r-- -jre/languages/R/doc/manual/ISBN = rw-r--r-- -jre/languages/R/doc/manual/resources.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile = rw-r--r-- -jre/languages/R/doc/manual/version.texi = rw-r--r-- -jre/languages/R/doc/manual/R-defs.texi = rw-r--r-- -jre/languages/R/doc/manual/R-exts.c = rw-r--r-- -jre/languages/R/doc/manual/rw-FAQ.texi = rw-r--r-- -jre/languages/R/doc/manual/R-FAQ.texi = rw-r--r-- -jre/languages/R/doc/manual/R-intro.R = rw-r--r-- -jre/languages/R/doc/manual/quot.sed = rw-r--r-- -jre/languages/R/doc/manual/README = rw-r--r-- -jre/languages/R/doc/manual/Rfaq.css = rw-r--r-- -jre/languages/R/doc/manual/refman.bot = rw-r--r-- -jre/languages/R/doc/manual/R-intro.texi = rw-r--r-- -jre/languages/R/doc/manual/stamp-images-html = rw-r--r-- -jre/languages/R/doc/manual/dir = rw-r--r-- -jre/languages/R/doc/manual/R-data.texi = rw-r--r-- -jre/languages/R/doc/manual/epsf.tex = rw-r--r-- -jre/languages/R/doc/manual/Rman.css = rw-r--r-- -jre/languages/R/doc/manual/R-ints.texi = rw-r--r-- -jre/languages/R/doc/manual/R-exts.R = rw-r--r-- -jre/languages/R/doc/manual/R-admin.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile.in = rw-r--r-- -jre/languages/R/doc/manual/R-lang.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile.win = rw-r--r-- -jre/languages/R/doc/manual/images/hist.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/hist.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig12.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig11.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/fig11.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig12.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ecdf.png = rw-r--r-- -jre/languages/R/doc/manual/images/ice.png = rw-r--r-- -jre/languages/R/doc/manual/images/QQ.png = rw-r--r-- -jre/languages/R/doc/manual/images/QQ.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ecdf.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ice.pdf = rw-r--r-- -jre/languages/R/jline.jar = rw-r--r-- -jre/languages/R/antlr4.jar = rw-r--r-- -jre/languages/R/xz-1.8.jar = rw-r--r-- -jre/languages/R/fastr-launcher.jar = rw-r--r-- -jre/languages/R/bin/exec/R = rwxr-xr-x -jre/languages/R/bin/Rscript = rwxr-xr-x -jre/languages/R/3rd_party_licenses_fastr.txt = rw-r--r-- -jre/languages/R/native-image.properties = rw-r--r-- -jre/languages/R/README_FASTR = rw-r--r-- -jre/languages/R/LICENSE_FASTR = rw-r--r-- -LICENSE_FASTR = rwxrwxrwx -3rd_party_licenses_fastr.txt = rwxrwxrwx -bin/Rscript = rwxrwxrwx -bin/R = rwxrwxrwx -jre/languages/R/release = rw-rw-r-- -jre/bin/Rscript = rwxrwxrwx -jre/bin/R = rwxrwxrwx \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/symlinks deleted file mode 100644 index 0aeecbe46387..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/META-INF/symlinks +++ /dev/null @@ -1,3 +0,0 @@ -LICENSE_FASTR = jre/languages/R/LICENSE_FASTR -bin/R = ../jre/bin/R -jre/bin/R = ../languages/R/bin/R \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/LICENSE_FASTR b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/LICENSE_FASTR deleted file mode 100644 index 54975fbea0e8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/LICENSE_FASTR +++ /dev/null @@ -1,720 +0,0 @@ -Product License - GraalVM Community Edition 1.0 R Language Component - -This is a release of GraalVM Community Edition 1.0 R Language Component. This -particular copy of the software is released under version 3 of GNU General -Public License. - -Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved - -=========================================================================== - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - -=========================================================================== - - WRITTEN OFFER FOR SOURCE CODE -For any software that you receive from Oracle in binary form which is licensed -under an open source license that gives you the right to receive the source -code for that binary, you can obtain a copy of the applicable source code by -visiting http://www.oracle.com/goto/opensourcecode. If the source code for the -binary was not provided to you with the binary, you can also receive a copy of -the source code on physical media by submitting a written request to the -address listed below or by sending an email to Oracle using the following link: - http://www.oracle.com/goto/opensourcecode/request. - -Oracle America, Inc. -Attn: Senior Vice President -Development and Engineering Legal -500 Oracle Parkway, 10th Floor -Redwood Shores, CA 94065 - -Your request should include: - • The name of the binary for which you are requesting the source code - • The name and version number of the Oracle product containing the binary - • The date you received the Oracle product - • Your name - • Your company name (if applicable) - • Your return mailing address and email, and - • A telephone number in the event we need to reach you. - -We may charge you a fee to cover the cost of physical media and processing. -Your request must be sent - a. within three (3) years of the date you received the Oracle product that -included the binary that is the subject of your request, or - b. in the case of code licensed under the GPL v3 for as long as Oracle -offers spare parts or customer support for that product model. - -=========================================================================== diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/README_FASTR b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/README_FASTR deleted file mode 100644 index a5283f739238..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/README_FASTR +++ /dev/null @@ -1,70 +0,0 @@ -[![Join the chat at https://gitter.im/graalvm/graal-core](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/graalvm/graal-core?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -A high-performance implementation of the R programming language, built on GraalVM. - -FastR aims to be: -* [efficient](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#4ab6): executing R language scripts faster than any other R runtime -* [polyglot](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#0f5c): allowing [polyglot interoperability](https://www.graalvm.org/docs/reference-manual/polyglot/) with other languages in the GraalVM ecosystem. -* [compatible](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#fff5): providing support for existing packages and the R native interface -* [embeddable](https://github.com/graalvm/examples/tree/master/r_java_embedding): allowing integration using the R embedding API or the GraalVM polyglot embedding SDK - - -The screenshot below shows Java application with embedded FastR engine. -The plot below was generated by `ggplot2` running on FastR and it shows -peak performance of the [raytracing example](http://www.tylermw.com/throwing-shade/). -The measurements were [reproduced independently](https://nextjournal.com/sdanisch/fastr-benchmark). - -![Java embedding](documentation/assets/javaui.png) -![Speedup](documentation/assets/speedup.png) - - ## Getting Started -See the documentation on the GraalVM website on how to [get GraalVM](https://www.graalvm.org/docs/getting-started/) and [install and use FastR](http://www.graalvm.org/docs/reference-manual/languages/r/). - -``` -$ $GRAALVM/bin/R -Type 'q()' to quit R. -> print("Hello R!") -[1] "Hello R!" -> -``` - -## Documentation - -The reference manual for FastR, which explains its advantages, its current limitations, compatibility and additional functionality is available on the [GraalVM website](http://www.graalvm.org/docs/reference-manual/languages/r/). - -Further documentation, including contributor/developer-oriented information, is in the [documentation folder](documentation/Index.md) of this repository. - -## Current Status - -The goal of FastR is to be a drop-in replacement for GNU-R, the reference implementation of the R language. -FastR faithfully implements the R language, and any difference in behavior is considered to be a bug. - -FastR is capable of running binary R packages built for GNU-R as long as those packages properly use the R extensions C API (for best results, it is recommended to install R packages from source). -FastR supports R graphics via the grid package and packages based on grid (like lattice and ggplot2). -We are currently working towards support for the base graphics package. -FastR currently supports many of the popular R packages, such as ggplot2, jsonlite, testthat, assertthat, knitr, Shiny, Rcpp, rJava, quantmod and more… - -Moreover, support for dplyr and data.table are on the way. -We are actively monitoring and improving FastR support for the most popular packages published on CRAN including all the tidyverse packages. -However, one should take into account the experimental state of FastR, there can be packages that are not compatible yet, and if you try it on a complex R application, it can stumble on those. - -## Stay connected with the community - -See [graalvm.org/community](https://www.graalvm.org/community/) on how to stay connected with the development community. -The discussion on [gitter](https://gitter.im/graalvm/graal-core) is a good way to get in touch with us. - -We would like to grow the FastR open-source community to provide a free R implementation atop the Truffle/Graal stack. -We encourage contributions, and invite interested developers to join in. -Prospective contributors need to sign the [Oracle Contributor Agreement (OCA)](http://www.oracle.com/technetwork/community/oca-486395.html). -The access point for contributions, issues and questions about FastR is the [GitHub repository](https://github.com/oracle/fastr). - -## Authors - -FastR is developed by Oracle Labs and is based on [the GNU-R runtime](http://www.r-project.org/). -It contains contributions by researchers at Purdue University ([purdue-fastr](https://github.com/allr/purdue-fastr)), Northeastern University, JKU Linz, TU Dortmund and TU Berlin. - -## License - -FastR is available under a GPLv3 license. - - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/doc/THANKS b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/doc/THANKS deleted file mode 100644 index 6f8eb3ee226a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/doc/THANKS +++ /dev/null @@ -1,70 +0,0 @@ -R would not be what it is today without the invaluable help of these -people outside of the R core team, who contributed by donating code, bug -fixes and documentation: - -Valerio Aimale, Suharto Anggono, Thomas Baier, Henrik Bengtsson, Roger Bivand, -Ben Bolker, David Brahm, G"oran Brostr"om, Patrick Burns, Vince Carey, -Saikat DebRoy, Matt Dowle, Brian D'Urso, Lyndon Drake, Dirk Eddelbuettel, -Claus Ekstrom, Sebastian Fischmeister, John Fox, Paul Gilbert, -Yu Gong, Gabor Grothendieck, Frank E Harrell Jr, Peter M. Haverty, -Torsten Hothorn, Robert King, Kjetil Kjernsmo, Roger Koenker, Philippe Lambert, -Jan de Leeuw, Jim Lindsey, Patrick Lindsey, Catherine Loader, -Gordon Maclean, John Maindonald, David Meyer, Ei-ji Nakama, -Jens Oehlschaegel, Steve Oncley, Richard O'Keefe, Hubert Palme, -Roger D. Peng, Jose' C. Pinheiro, Tony Plate, Anthony Rossini, -Jonathan Rougier, Petr Savicky, Guenther Sawitzki, Marc Schwartz, -Arun Srinivasan, Detlef Steuer, Bill Simpson, Gordon Smyth, Adrian Trapletti, -Terry Therneau, Rolf Turner, Bill Venables, Gregory R. Warnes, -Andreas Weingessel, Morten Welinder, James Wettenhall, Simon Wood, and -Achim Zeileis. - -Others have written code that has been adopted by R and is -acknowledged in the code files, including - -J. D. Beasley, David J. Best, Richard Brent, Kevin Buhr, Michael -A. Covington, Bill Cleveland, Robert Cleveland,, G. W. Cran, -C. G. Ding, Ulrich Drepper, Paul Eggert, J. O. Evans, David M. Gay, -H. Frick, G. W. Hill, Richard H. Jones, Eric Grosse, Shelby Haberman, -Bruno Haible, John Hartigan, Andrew Harvey, Trevor Hastie, Min Long -Lam, George Marsaglia, K. J. Martin, Gordon Matzigkeit, -C. R. Mckenzie, Jean McRae, Cyrus Mehta, Fionn Murtagh, John C. Nash, -Finbarr O'Sullivan, R. E. Odeh, William Patefield, Nitin Patel, Alan -Richardson, D. E. Roberts, Patrick Royston, Russell Lenth, Ming-Jen -Shyu, Richard C. Singleton, S. G. Springer, Supoj Sutanthavibul, Irma -Terpenning, G. E. Thomas, Rob Tibshirani, Wai Wan Tsang, Berwin -Turlach, Gary V. Vaughan, Michael Wichura, Jingbo Wang, M. A. Wong, -and the Free Software Foundation (for autoconf code and utilities). -See also files under src/extras. - -Many more, too numerous to mention here, have contributed by sending bug -reports and suggesting various improvements. - -Simon Davies whilst at the University of Auckland wrote the original -version of glm(). - -Julian Harris and Wing Kwong (Tiki) Wan whilst at the University of -Auckland assisted Ross Ihaka with the original Macintosh port. - -R was inspired by the S environment which has been principally -developed by John Chambers, with substantial input from Douglas Bates, -Rick Becker, Bill Cleveland, Trevor Hastie, Daryl Pregibon and -Allan Wilks. - -A special debt is owed to John Chambers who has graciously contributed -advice and encouragement in the early days of R and later became a -member of the core team. - - - -The R Foundation may decide to give out @R-project.org -email addresses to contributors to the R Project (even without making them -members of the R Foundation) when in the view of the R Foundation this -would help advance the R project. - -The R Core Group, Roger Bivand, Jennifer Bryan, Di Cook, Dirk Eddelbuettel, -John Fox, Bettina Grün, Frank Harrell, Torsten Hothorn, Stefano Iacus, -Julie Josse, Balasubramanian Narasimhan, Marc Schwartz, Heather Turner, -Bill Venables, Hadley Wickham and Achim Zeileis are the ordinary members of -the R Foundation. -In addition, David Meyer and Simon Wood are also e-addressable by -.@R-project.org. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/include/linked b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/include/linked deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/library/utils/DESCRIPTION b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/library/utils/DESCRIPTION deleted file mode 100644 index e8a417ec3fe6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/library/utils/DESCRIPTION +++ /dev/null @@ -1,11 +0,0 @@ -Package: utils -Version: 3.5.1 -Priority: base -Title: The R Utils Package -Author: R Core Team and contributors worldwide -Maintainer: R Core Team -Description: R utility functions. -License: Part of R 3.5.1 -Suggests: methods, xml2, commonmark -NeedsCompilation: yes -Built: R 3.5.1; x86_64-apple-darwin18.2.0; 2019-04-02 04:04:54 UTC; unix diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/native-image.properties deleted file mode 100644 index 0b896fe5ce53..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/native-image.properties +++ /dev/null @@ -1,28 +0,0 @@ -# This file contains native-image arguments needed to fastr -# - -ImageName = RMain - -Requires = tool:nfi \ - tool:chromeinspector \ - tool:nfi \ - tool:profiler - -JavaArgs = \ - -Dfastr.resource.factory.class=com.oracle.truffle.r.nodes.builtin.EagerResourceHandlerFactory \ - -Dfastr.internal.usemxbeans=false \ - -Dfastr.internal.usenativeeventloop=false \ - -Dfastr.internal.defaultdownloadmethod=wget \ - -Dfastr.internal.ignorejvmargs=true \ - -Dfastr.use.remote.grid.awt.device=true - -LauncherClass = com.oracle.truffle.r.launcher.RMain -LauncherClassPath = lib/graalvm/launcher-common.jar:languages/R/fastr-launcher.jar - -Args = --enable-http \ - -H:MaxRuntimeCompileMethods=8000 \ - -H:+UnlockExperimentalVMOptions \ - -H:-TruffleCheckFrameImplementation \ - -H:+TruffleCheckNeverPartOfCompilation \ - -H:-UseServiceLoaderFeature \ - -H:-UnlockExperimentalVMOptions diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/release deleted file mode 100644 index eb822705c23a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=macos -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/share/java/README b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/share/java/README deleted file mode 100644 index 6201c0580eb8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/r/jre/languages/R/share/java/README +++ /dev/null @@ -1,3 +0,0 @@ -getsp.class has source tools/getsp.java. - -It is installed for use by R CMD javareconf. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/MANIFEST.MF deleted file mode 100644 index 47deba0d850a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/MANIFEST.MF +++ /dev/null @@ -1,14 +0,0 @@ -Bundle-Name: TruffleRuby -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Version: 19.3.0.0 -Require-Bundle: llvm-toolchain -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.1.0.0 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/ruby -x-GraalVM-Message-PostInst: \nIMPORTANT NOTE:\n---------------\nThe Ruby - openssl C extension needs to be recompiled on your system to work with - the installed libssl.\nFirst, make sure TruffleRuby's dependencies are i - nstalled, which are described at:\n https://github.com/oracle/truffleru - by/blob/master/README.md#dependencies\nThen run the following command:\n - ${graalvm_home}/jre/languages/ruby/lib/truffle/post_install_hook - .sh diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/permissions deleted file mode 100644 index bb398974f8a7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/permissions +++ /dev/null @@ -1,7 +0,0 @@ -bin/truffleruby = rwxrwxrwx -bin/rake = rwxrwxrwx -jre/bin/truffleruby = rwxrwxrwx -jre/bin/rake = rwxrwxrwx -LICENSE_TRUFFLERUBY.md = rwxrwxrwx -jre/languages/ruby/release = rw-rw-r-- -jre/languages/ruby/lib/cext/include/sulong/polyglot.h = rw-rw-r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/symlinks deleted file mode 100644 index fa711df113bd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/META-INF/symlinks +++ /dev/null @@ -1,6 +0,0 @@ -bin/ruby = ../jre/bin/ruby -bin/rake = ../jre/bin/rake -jre/bin/truffleruby = ../languages/ruby/bin/truffleruby -jre/bin/rake = ../languages/ruby/bin/rake -LICENSE_TRUFFLERUBY.md = jre/languages/ruby/LICENSE_TRUFFLERUBY.md -jre/languages/ruby/bin/ruby = truffleruby \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/LICENSE_TRUFFLERUBY.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/LICENSE_TRUFFLERUBY.md deleted file mode 100644 index 8e3aea7e3802..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/LICENSE_TRUFFLERUBY.md +++ /dev/null @@ -1 +0,0 @@ -Some license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/README.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/README.md deleted file mode 100644 index e23317b39c52..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/README.md +++ /dev/null @@ -1,218 +0,0 @@ -![TruffleRuby logo](logo/png/truffleruby_logo_horizontal_medium.png) - -A high performance implementation of the Ruby programming language. Built on -[GraalVM](http://graalvm.org/) by [Oracle Labs](https://labs.oracle.com). - -## Getting started - -There are three ways to install TruffleRuby: - -* Via [GraalVM](doc/user/installing-graalvm.md), which includes support for - other languages such as JavaScript, R and Python and supports both the - [*native* and *JVM* configurations](#truffleruby-configurations). - Inside GraalVM will then be a `bin/ruby` command that runs TruffleRuby. - We recommend that you use a [Ruby manager](doc/user/ruby-managers.md#configuring-ruby-managers-for-the-full-graalvm-distribution) - to use TruffleRuby inside GraalVM. - -* Via your [Ruby manager/installer](doc/user/ruby-managers.md) (RVM, rbenv, - chruby, ruby-build, ruby-install). This contains only TruffleRuby, in the - [*native* configuration](#truffleruby-configurations), making it a smaller - download. It is meant for users just wanting a Ruby implementation and already - using a Ruby manager. - -* Using the [standalone distribution](doc/user/standalone-distribution.md) - as a simple binary tarball. This distribution is also useful for - [testing TruffleRuby in CI](doc/user/standalone-distribution.md). - On [TravisCI](https://docs.travis-ci.com/user/languages/ruby#truffleruby), you can simply use: - ```yaml - language: ruby - rvm: - - truffleruby - ``` - -You can use `gem` to install Gems as normal. - -You can also build TruffleRuby from source, see the -[building instructions](doc/contributor/workflow.md), and using -[Docker](doc/contributor/docker.md). - -Please report any issue you might find on [GitHub](https://github.com/oracle/truffleruby/issues). - -## Aim - -TruffleRuby aims to: - -* Run idiomatic Ruby code faster -* Run Ruby code in parallel -* Boot Ruby applications in less time -* Execute C extensions in a managed environment -* Add fast and low-overhead interoperability with languages like Java, JavaScript, Python and R -* Provide new tooling such as debuggers and monitoring -* All while maintaining very high compatibility with the standard implementation of Ruby - -## TruffleRuby configurations - -There are two main configurations of TruffleRuby: *native* and *JVM*. It's -important to understand the different configurations of TruffleRuby, as each has -different capabilities and performance characteristics. You should pick the -execution mode that is appropriate for your application. - -TruffleRuby by default runs in the *native* -configuration. In this configuration, TruffleRuby is ahead-of-time compiled to a -standalone native executable. This means that you don't need a JVM installed on -your system to use it. The advantage of the native configuration is that it -[starts about as fast as MRI](doc/contributor/svm.md), it may use less memory, -and it becomes fast in less time. The disadvantage of the native configuration -is that you can't use Java tools like VisualVM, you can't use Java -interoperability, and *peak performance may be lower than on the JVM*. The -native configuration is used by default, but you can also request it using -`--native`. To use polyglot programming with the *native* configuration, you -need to use the `--polyglot` flag. To check you are using the *native* -configuration, `ruby --version` should mention `Native`. - -TruffleRuby can also be used in the *JVM* configuration, where it runs as a -normal Java application on the JVM, as any other Java application would. The -advantage of the JVM configuration is that you can use Java interoperability, -and *peak performance may be higher than the native configuration*. The -disadvantage of the JVM configuration is that it takes much longer to start and -to get fast, and may use more memory. The JVM configuration is requested using -`--jvm`. To check you are using the *JVM* configuration, `ruby --version` should -not mention `Native`. - -If you are running a short-running program you probably want the default, -*native*, configuration. If you are running a long-running program and want the -highest possible performance you probably want the *JVM* configuration, by using -`--jvm`. - -At runtime you can tell if you are using the native configuration using -`TruffleRuby.native?`. - -You won't encounter it when using TruffleRuby from the GraalVM, but there is -also another configuration which is TruffleRuby running on the JVM but with the -Graal compiler not available. This configuration will have much lower -performance and should normally only be used for development. `ruby --version` -will mention `Interpreter` for this configuration. - -## System compatibility - -TruffleRuby is actively tested on these systems: - -* Oracle Linux 7 -* Ubuntu 18.04 LTS -* Ubuntu 16.04 LTS -* Fedora 28 -* macOS 10.14 (Mojave) -* macOS 10.13 (High Sierra) - -You may find that TruffleRuby will not work if you severely restrict the -environment, for example by unmounting system filesystems such as `/dev/shm`. - -## Dependencies - -* [LLVM](doc/user/installing-llvm.md) to build and run C extensions -* [libssl](doc/user/installing-libssl.md) for the `openssl` C extension -* [zlib](doc/user/installing-zlib.md) for the `zlib` C extension - -Without these dependencies, many libraries including RubyGems will not work. -TruffleRuby will try to print a nice error message if a dependency is missing, -but this can only be done on a best effort basis. - -You may also need to set up a [UTF-8 locale](doc/user/utf8-locale.md). - -## Current status - -We recommend that people trying TruffleRuby on their gems and applications -[get in touch with us](#contact) for help. - -TruffleRuby is progressing fast but is currently probably not ready for you to -try running your full Ruby application on. However it is ready for -experimentation and curious end-users to try on their gems and smaller -applications. - -TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it -is missing support for Nokogiri and ActiveRecord database drivers which makes it -not practical to run real Rails applications at the moment. - -You will find that many C extensions will not work without modification. - -## Migration from MRI - -TruffleRuby should in most cases work as a drop-in replacement for MRI, but you -should read about our [compatibility](doc/user/compatibility.md). - -## Migration from JRuby - -For many use cases TruffleRuby should work as a drop-in replacement for JRuby. -However, our approach to integration with Java is different to JRuby so you -should read our [migration guide](doc/user/jruby-migration.md). - -## Documentation - -Extensive documentation is available in [`doc`](doc). -[`doc/user`](doc/user) documents how to use TruffleRuby and -[`doc/contributor`](doc/contributor) documents how to develop TruffleRuby. - -## Contact - -The best way to get in touch with us is to join us in -https://gitter.im/graalvm/truffleruby, but you can also Tweet to -[@TruffleRuby](https://twitter.com/truffleruby), or email -chris.seaton@oracle.com. - -## Mailing list - -Announcements about GraalVM, including TruffleRuby, are made on the -[graal-dev](http://mail.openjdk.java.net/mailman/listinfo/graal-dev) mailing list. - -## Authors - -The main authors of TruffleRuby in order of joining the project are: - -* Chris Seaton -* Benoit Daloze -* Kevin Menard -* Petr Chalupa -* Brandon Fish -* Duncan MacGregor -* Christian Wirth - -Additionally: - -* Thomas Würthinger -* Matthias Grimmer -* Josef Haider -* Fabio Niephaus -* Matthias Springer -* Lucas Allan Amorim -* Aditya Bhardwaj - -Collaborations with: - -* [Institut für Systemsoftware at Johannes Kepler University - Linz](http://ssw.jku.at) - -And others. - -## Security - -See the [security documentation](doc/user/security.md). - -## Licence - -TruffleRuby is copyright (c) 2013-2019 Oracle and/or its affiliates, and is made -available to you under the terms of any one of the following three licenses: - -* Eclipse Public License version 1.0, or -* GNU General Public License version 2, or -* GNU Lesser General Public License version 2.1. - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. - -## Attribution - -TruffleRuby is a fork of [JRuby](https://github.com/jruby/jruby), combining it -with code from the [Rubinius](https://github.com/rubinius/rubinius) project, and -also containing code from the standard implementation of Ruby, -[MRI](https://github.com/ruby/ruby). diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/doc/doc/legal/ruby-licence.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/doc/doc/legal/ruby-licence.txt deleted file mode 100644 index f06056fb45fb..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/doc/doc/legal/ruby-licence.txt +++ /dev/null @@ -1,56 +0,0 @@ -Ruby is copyrighted free software by Yukihiro Matsumoto . -You can redistribute it and/or modify it under either the terms of the -2-clause BSDL (see the file BSDL), or the conditions below: - - 1. You may make and give away verbatim copies of the source form of the - software without restriction, provided that you duplicate all of the - original copyright notices and associated disclaimers. - - 2. You may modify your copy of the software in any way, provided that - you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said - modifications to Usenet or an equivalent medium, or by allowing - the author to include your modifications in the software. - - b) use the modified software only within your corporation or - organization. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 3. You may distribute the software in object code or binary form, - provided that you do at least ONE of the following: - - a) distribute the binaries and library files of the software, - together with instructions (in the manual page or equivalent) - on where to get the original distribution. - - b) accompany the distribution with the machine-readable source of - the software. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 4. You may modify and include the part of the software into any other - software (possibly commercial). But some files in the distribution - are not written by the author, so that they are not under these terms. - - For the list of those files and their copying conditions, see the - file LEGAL. - - 5. The scripts and library files supplied as input to or produced as - output from the software do not automatically fall under the - copyright of the software, but belong to whomever generated them, - and may be sold commercially, and may be aggregated with this - software. - - 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/doc/doc/user/netbeans.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/doc/doc/user/netbeans.md deleted file mode 100644 index 0e9236814854..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/doc/doc/user/netbeans.md +++ /dev/null @@ -1,29 +0,0 @@ -# NetBeans integration - -You can debug Ruby programs running in TruffleRuby using the NetBeans IDE. - -## Setup - -* Install NetBeans 8.2 -* Via Tools, Plugins, install 'Truffle Debugging Support' -* [Install TruffleRuby](installing-graalvm.md) - -We then need a project to debug. An example project that works well and -demonstrates features is available on GitHub: - -``` -$ git clone https://github.com/jtulach/sieve.git -``` - -Open `ruby+js/fromjava` as a NetBeans project. - -* Right click on the project -* Open Properties, Build, Compile, Java Platform -* Manage Java Platforms, Add Platform, and select the GraalVM directory -* Now we can set a breakpoint in Ruby by opening `sieve.rb` and clicking on the - line in `Natural#next` -* Finally, 'Debug Project' - -You will be able to debug the Ruby program as normal, and if you look at the -call stack you'll see that there are also Java and JavaScript frames that you -can debug as well, all inside the same virtual machine and debugger. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/native-image.properties deleted file mode 100644 index 69c2e64ac39f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/native-image.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file contains native-image arguments needed to build truffleruby -# - -ImageName = truffleruby - -Requires = tool:truffle tool:nfi - -LauncherClass = org.truffleruby.launcher.RubyLauncher -LauncherClassPath = languages/ruby/truffleruby-annotations.jar:languages/ruby/truffleruby-shared.jar:lib/graalvm/launcher-common.jar:lib/graalvm/truffleruby-launcher.jar - -Args = -H:MaxRuntimeCompileMethods=5400 \ - -H:+AddAllCharsets - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=ruby \ - -Dorg.graalvm.launcher.relative.llvm.home=../lib/cext/sulong-libs diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/19.3.0.0/ruby/jre/languages/ruby/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog-19.3.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog-19.3.properties deleted file mode 100644 index a01e64f46bf5..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog-19.3.properties +++ /dev/null @@ -1,68 +0,0 @@ -org.graalvm.1.0.0.0_linux_amd64=GraalVM 1.0.1.0 linux/amd64 -org.graalvm.1.1.0.1_linux_amd64=GraalVM 1.1.0.1 linux/amd64 -org.graalvm.1.1.1-0.rc.1_linux_amd64=GraalVM 1.1.0.1 linux/amd64 -org.graalvm.19.3.0.0_linux_amd64=GraalVM 19.3 linux/amd64 - -Component.linux_amd64/1.0.0.0/org.graalvm.python=python/1.0.0.0 -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Version=1.0.0.0 - -Component.linux_amd64/1.1.0.0/org.graalvm.python=python/1.1.0.0 -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.1.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Version=1.1.0.0 - -Component.linux_amd64/1.0.1.0/org.graalvm.r=r/1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Version=1.0.1.0 - -Component.linux_amd64/1.1.0.1/org.graalvm.r=r/1.1.0.1 -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.1.0.1)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Version=1.1.0.1 - -Component.linux_amd64/1.0.0.0/org.graalvm.ruby=ruby/1.0.0.0 -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Version=1.0.0.0 - - -Component.linux_amd64/19.3.0.0/org.graalvm.r=19.3.0.0/r -Component.linux_amd64/19.3.0.0/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/19.3.0.0/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3.0.0/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/19.3.0.0/org.graalvm.r-Bundle-Version=19.3.0.0 -Component.linux_amd64/19.3.0.0/org.graalvm.r-Require-Bundle=org.graalvm.llvm-toolchain - -Component.linux_amd64/19.3.0.0/org.graalvm.llvm_toolchain=19.3.0.0/llvm-toolchain -Component.linux_amd64/19.3.0.0/org.graalvm.llvm_toolchain-Bundle-Symbolic-Name=org.graalvm.llvm-toolchain -Component.linux_amd64/19.3.0.0/org.graalvm.llvm_toolchain-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=19.3.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3.0.0/org.graalvm.llvm_toolchain-Bundle-Name=LLVM tools chain -Component.linux_amd64/19.3.0.0/org.graalvm.llvm_toolchain-Bundle-Version=19.3.0.0 - - -Component.linux_amd64/1.0.0.0/org.graalvm=core/graalvm-1.0.0.0.jar -Component.linux_amd64/1.0.0.0/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.0.0.0/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.0.0.0/org.graalvm-Bundle-Version=1.0.0.0 - -Component.linux_amd64/1.1.0.1/org.graalvm=core/graalvm-1.1.0.1.jar -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Version=1.1.0.1 - -Component.linux_amd64/19.3.0.0/org.graalvm=19.3.0.0/graalvm-19.3.0.0.jar -Component.linux_amd64/19.3.0.0/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/19.3.0.0/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/19.3.0.0/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/19.3.0.0/org.graalvm-Bundle-Version=19.3.0.0 - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog.properties deleted file mode 100644 index 70c3d3a4b590..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog.properties +++ /dev/null @@ -1,103 +0,0 @@ -org.graalvm.1.0.0.0_macos_amd64=GraalVM 1.0.0.0 macos/amd64 -org.graalvm.1.0.0.0_linux_amd64=GraalVM 1.0.1.0 linux/amd64 -org.graalvm.1.0.0-dev_linux_amd64=GraalVM 1.0.0.0-dev linux/amd64 -org.graalvm.1.0.1.0_linux_amd64=GraalVM 1.0.1.1 linux/amd64 -org.graalvm.1.1.0.0_linux_amd64=GraalVM 1.1.0.0 linux/amd64 -org.graalvm.1.1.0.1_linux_amd64=GraalVM 1.1.0.1 linux/amd64 -org.graalvm.1.1.1-0.rc.1_linux_amd64=GraalVM 1.1.0.1 linux/amd64 - -Component.linux_amd64/1.0.0.0/org.graalvm.python=python/1.0.0.0 -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Version=1.0.0.0 - -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm.python=python/1.0.0.0-0.dev -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0.0-0.dev)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm.python-Bundle-Version=1.0.0.0-0.dev - -Component.linux_amd64/1.0.1.0/org.graalvm.python=python/1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.1.0.0/org.graalvm.python=python/1.1.0.0 -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.1.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Version=1.1.0.0 - -Component.linux_amd64/1.0.1.0/org.graalvm.r=r/1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.0.1.1/org.graalvm.r=r/1.0.1.1 -Component.linux_amd64/1.0.1.1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.0.1.1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.1/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.0.1.1/org.graalvm.r-Bundle-Version=1.0.1.1 -Component.linux_amd64/1.1.0.0/org.graalvm.r=r/1.1.0.0 -Component.linux_amd64/1.1.0.0/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.1.0.0/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.1.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.0/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.1.0.0/org.graalvm.r-Bundle-Version=1.1.0.0 -Component.linux_amd64/1.1.0.1/org.graalvm.r=r/1.1.0.1 -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.1.0.1)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Version=1.1.0.1 - -Component.linux_amd64/1.0.0.0/org.graalvm.ruby=ruby/1.0.0.0 -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Version=1.0.0.0 -Component.linux_amd64/1.0.1.0/org.graalvm.ruby=ruby/1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.0.1.1/org.graalvm.ruby=ruby/1.0.1.1 -Component.linux_amd64/1.0.1.1/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.1.1/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.1/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.1.1/org.graalvm.ruby-Bundle-Version=1.0.1.1 - -Component.linux_amd64/1.0.0.0/org.graalvm=core/graalvm-1.0.0.0.jar -Component.linux_amd64/1.0.0.0/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.0.0.0/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.0.0.0/org.graalvm-Bundle-Version=1.0.0.0 - -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm=core/graalvm-1.0.0.0-0.dev.jar -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.0.0.0-0.dev/org.graalvm-Bundle-Version=1.0.0.0-0.dev - -Component.linux_amd64/1.0.1.0/org.graalvm=core/graalvm-1.0.1.0.jar -Component.linux_amd64/1.0.1.0/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.0.1.0/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.0.1.0/org.graalvm-Bundle-Version=1.0.1.0 - -Component.linux_amd64/1.1.0.0/org.graalvm=core/graalvm-1.1.0.0.jar -Component.linux_amd64/1.1.0.0/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.1.0.0/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.0/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.1.0.0/org.graalvm-Bundle-Version=1.1.0.0 - -Component.linux_amd64/1.1.0.1/org.graalvm=core/graalvm-1.1.0.1.jar -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Version=1.1.0.1 - -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm=core/graalvm-1.1.1-0.rc.1.jar -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm-Bundle-Version=1.1.1-0.rc.1 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog2.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog2.properties deleted file mode 100644 index 61218e2b9150..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/catalog2.properties +++ /dev/null @@ -1,83 +0,0 @@ -org.graalvm.1.0.0.0_macos_amd64=GraalVM 1.0.0.0 macos/amd64 -org.graalvm.1.0.0.0_linux_amd64=GraalVM 1.0.1.0 linux/amd64 -org.graalvm.1.0.1.0_linux_amd64=GraalVM 1.0.1.1 linux/amd64 -org.graalvm.1.1.0.0_linux_amd64=GraalVM 1.1.0.0 linux/amd64 -org.graalvm.1.1.0.1_linux_amd64=GraalVM 1.1.0.1 linux/amd64 -org.graalvm.1.1.1-0.rc.1_linux_amd64=GraalVM 1.1.0.1 linux/amd64 - -Component.linux_amd64/1.0.0.0/org.graalvm.python=python/1.0.0.0 -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.0.0.0/org.graalvm.python-Bundle-Version=1.0.0.0 -Component.linux_amd64/1.0.1.0/org.graalvm.python=python/1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.0.1.0/org.graalvm.python-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.1.0.0/org.graalvm.python=python/1.1.0.0 -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Symbolic-Name=org.graalvm.python -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.1.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Name=Graal.Python -Component.linux_amd64/1.1.0.0/org.graalvm.python-Bundle-Version=1.1.0.0 - -Component.linux_amd64/1.0.1.0/org.graalvm.r=r/1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.0.1.0/org.graalvm.r-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.0.1.1/org.graalvm.r=r/1.0.1.1 -Component.linux_amd64/1.0.1.1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.0.1.1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.1/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.0.1.1/org.graalvm.r-Bundle-Version=1.0.1.1 -Component.linux_amd64/1.1.0.0/org.graalvm.r=r/1.1.0.0 -Component.linux_amd64/1.1.0.0/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.1.0.0/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.1.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.0/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.1.0.0/org.graalvm.r-Bundle-Version=1.1.0.0 -Component.linux_amd64/1.1.0.1/org.graalvm.r=r/1.1.0.1 -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Symbolic-Name=org.graalvm.R -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.1.0.1)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Name=FastR -Component.linux_amd64/1.1.0.1/org.graalvm.r-Bundle-Version=1.1.0.1 - -Component.linux_amd64/1.0.0.0/org.graalvm.ruby=ruby/1.0.0.0 -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.0.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.0.0/org.graalvm.ruby-Bundle-Version=1.0.0.0 -Component.linux_amd64/1.0.1.0/org.graalvm.ruby=ruby/1.0.1.0 -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.1.0/org.graalvm.ruby-Bundle-Version=1.0.1.0 -Component.linux_amd64/1.0.1.1/org.graalvm.ruby=ruby/1.0.1.1 -Component.linux_amd64/1.0.1.1/org.graalvm.ruby-Bundle-Symbolic-Name=org.graalvm.ruby -Component.linux_amd64/1.0.1.1/org.graalvm.ruby-Bundle-RequireCapability=org.graalvm; filter:="(&(graalvm_version=1.0.1.0)(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.1/org.graalvm.ruby-Bundle-Name=TruffleRuby -Component.linux_amd64/1.0.1.1/org.graalvm.ruby-Bundle-Version=1.0.1.1 - -Component.linux_amd64/1.0.1.0/org.graalvm=core/graalvm-1.0.1.0.jar -Component.linux_amd64/1.0.1.0/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.0.1.0/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.0.1.0/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.0.1.0/org.graalvm-Bundle-Version=1.0.1.0 - -Component.linux_amd64/1.1.0.0/org.graalvm=core/graalvm-1.1.0.0.jar -Component.linux_amd64/1.1.0.0/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.1.0.0/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.0/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.1.0.0/org.graalvm-Bundle-Version=1.1.0.0 - -Component.linux_amd64/1.1.0.1/org.graalvm=core/graalvm-1.1.0.1.jar -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.1.0.1/org.graalvm-Bundle-Version=1.1.0.1 - -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm=core/graalvm-1.1.1-0.rc.1.jar -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm-Bundle-Symbolic-Name=org.graalvm -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm-Bundle-RequireCapability=org.graalvm; filter:="(&(os_name=linux)(os_arch=amd64))" -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm-Bundle-Name=GraalVM Core -Component.linux_amd64/1.1.1-0.rc.1/org.graalvm-Bundle-Version=1.1.1-0.rc.1 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.0.1.0.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.0.1.0.jar deleted file mode 100644 index b19647fde2d6..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.0.1.0.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.0.0.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.0.0.jar deleted file mode 100644 index 0d308c509701..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.0.0.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.0.1.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.0.1.jar deleted file mode 100644 index b119c9f8ec1d..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.0.1.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.1-0.rc.1.jar b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.1-0.rc.1.jar deleted file mode 100644 index 33c701cec0e9..000000000000 Binary files a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/core/graalvm-1.1.1-0.rc.1.jar and /dev/null differ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/MANIFEST.MF deleted file mode 100644 index 44e6deadaa13..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Bundle-Name: TruffleRuby -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Version: 1.1.0.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.1.0.0 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/ruby -x-GraalVM-Message-PostInst: \nIMPORTANT NOTE:\n---------------\nThe Ruby - openssl C extension needs to be recompiled on your system to work with - the installed libssl.\nFirst, make sure TruffleRuby's dependencies are i - nstalled, which are described at:\n https://github.com/oracle/truffleru - by/blob/master/README.md#dependencies\nThen run the following command:\n - ${graalvm_home}/jre/languages/ruby/lib/truffle/post_install_hook - .sh diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/permissions deleted file mode 100644 index bb398974f8a7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/permissions +++ /dev/null @@ -1,7 +0,0 @@ -bin/truffleruby = rwxrwxrwx -bin/rake = rwxrwxrwx -jre/bin/truffleruby = rwxrwxrwx -jre/bin/rake = rwxrwxrwx -LICENSE_TRUFFLERUBY.md = rwxrwxrwx -jre/languages/ruby/release = rw-rw-r-- -jre/languages/ruby/lib/cext/include/sulong/polyglot.h = rw-rw-r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/symlinks deleted file mode 100644 index fa711df113bd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/META-INF/symlinks +++ /dev/null @@ -1,6 +0,0 @@ -bin/ruby = ../jre/bin/ruby -bin/rake = ../jre/bin/rake -jre/bin/truffleruby = ../languages/ruby/bin/truffleruby -jre/bin/rake = ../languages/ruby/bin/rake -LICENSE_TRUFFLERUBY.md = jre/languages/ruby/LICENSE_TRUFFLERUBY.md -jre/languages/ruby/bin/ruby = truffleruby \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md deleted file mode 100644 index 8e3aea7e3802..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md +++ /dev/null @@ -1 +0,0 @@ -Some license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/README.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/README.md deleted file mode 100644 index e23317b39c52..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/README.md +++ /dev/null @@ -1,218 +0,0 @@ -![TruffleRuby logo](logo/png/truffleruby_logo_horizontal_medium.png) - -A high performance implementation of the Ruby programming language. Built on -[GraalVM](http://graalvm.org/) by [Oracle Labs](https://labs.oracle.com). - -## Getting started - -There are three ways to install TruffleRuby: - -* Via [GraalVM](doc/user/installing-graalvm.md), which includes support for - other languages such as JavaScript, R and Python and supports both the - [*native* and *JVM* configurations](#truffleruby-configurations). - Inside GraalVM will then be a `bin/ruby` command that runs TruffleRuby. - We recommend that you use a [Ruby manager](doc/user/ruby-managers.md#configuring-ruby-managers-for-the-full-graalvm-distribution) - to use TruffleRuby inside GraalVM. - -* Via your [Ruby manager/installer](doc/user/ruby-managers.md) (RVM, rbenv, - chruby, ruby-build, ruby-install). This contains only TruffleRuby, in the - [*native* configuration](#truffleruby-configurations), making it a smaller - download. It is meant for users just wanting a Ruby implementation and already - using a Ruby manager. - -* Using the [standalone distribution](doc/user/standalone-distribution.md) - as a simple binary tarball. This distribution is also useful for - [testing TruffleRuby in CI](doc/user/standalone-distribution.md). - On [TravisCI](https://docs.travis-ci.com/user/languages/ruby#truffleruby), you can simply use: - ```yaml - language: ruby - rvm: - - truffleruby - ``` - -You can use `gem` to install Gems as normal. - -You can also build TruffleRuby from source, see the -[building instructions](doc/contributor/workflow.md), and using -[Docker](doc/contributor/docker.md). - -Please report any issue you might find on [GitHub](https://github.com/oracle/truffleruby/issues). - -## Aim - -TruffleRuby aims to: - -* Run idiomatic Ruby code faster -* Run Ruby code in parallel -* Boot Ruby applications in less time -* Execute C extensions in a managed environment -* Add fast and low-overhead interoperability with languages like Java, JavaScript, Python and R -* Provide new tooling such as debuggers and monitoring -* All while maintaining very high compatibility with the standard implementation of Ruby - -## TruffleRuby configurations - -There are two main configurations of TruffleRuby: *native* and *JVM*. It's -important to understand the different configurations of TruffleRuby, as each has -different capabilities and performance characteristics. You should pick the -execution mode that is appropriate for your application. - -TruffleRuby by default runs in the *native* -configuration. In this configuration, TruffleRuby is ahead-of-time compiled to a -standalone native executable. This means that you don't need a JVM installed on -your system to use it. The advantage of the native configuration is that it -[starts about as fast as MRI](doc/contributor/svm.md), it may use less memory, -and it becomes fast in less time. The disadvantage of the native configuration -is that you can't use Java tools like VisualVM, you can't use Java -interoperability, and *peak performance may be lower than on the JVM*. The -native configuration is used by default, but you can also request it using -`--native`. To use polyglot programming with the *native* configuration, you -need to use the `--polyglot` flag. To check you are using the *native* -configuration, `ruby --version` should mention `Native`. - -TruffleRuby can also be used in the *JVM* configuration, where it runs as a -normal Java application on the JVM, as any other Java application would. The -advantage of the JVM configuration is that you can use Java interoperability, -and *peak performance may be higher than the native configuration*. The -disadvantage of the JVM configuration is that it takes much longer to start and -to get fast, and may use more memory. The JVM configuration is requested using -`--jvm`. To check you are using the *JVM* configuration, `ruby --version` should -not mention `Native`. - -If you are running a short-running program you probably want the default, -*native*, configuration. If you are running a long-running program and want the -highest possible performance you probably want the *JVM* configuration, by using -`--jvm`. - -At runtime you can tell if you are using the native configuration using -`TruffleRuby.native?`. - -You won't encounter it when using TruffleRuby from the GraalVM, but there is -also another configuration which is TruffleRuby running on the JVM but with the -Graal compiler not available. This configuration will have much lower -performance and should normally only be used for development. `ruby --version` -will mention `Interpreter` for this configuration. - -## System compatibility - -TruffleRuby is actively tested on these systems: - -* Oracle Linux 7 -* Ubuntu 18.04 LTS -* Ubuntu 16.04 LTS -* Fedora 28 -* macOS 10.14 (Mojave) -* macOS 10.13 (High Sierra) - -You may find that TruffleRuby will not work if you severely restrict the -environment, for example by unmounting system filesystems such as `/dev/shm`. - -## Dependencies - -* [LLVM](doc/user/installing-llvm.md) to build and run C extensions -* [libssl](doc/user/installing-libssl.md) for the `openssl` C extension -* [zlib](doc/user/installing-zlib.md) for the `zlib` C extension - -Without these dependencies, many libraries including RubyGems will not work. -TruffleRuby will try to print a nice error message if a dependency is missing, -but this can only be done on a best effort basis. - -You may also need to set up a [UTF-8 locale](doc/user/utf8-locale.md). - -## Current status - -We recommend that people trying TruffleRuby on their gems and applications -[get in touch with us](#contact) for help. - -TruffleRuby is progressing fast but is currently probably not ready for you to -try running your full Ruby application on. However it is ready for -experimentation and curious end-users to try on their gems and smaller -applications. - -TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it -is missing support for Nokogiri and ActiveRecord database drivers which makes it -not practical to run real Rails applications at the moment. - -You will find that many C extensions will not work without modification. - -## Migration from MRI - -TruffleRuby should in most cases work as a drop-in replacement for MRI, but you -should read about our [compatibility](doc/user/compatibility.md). - -## Migration from JRuby - -For many use cases TruffleRuby should work as a drop-in replacement for JRuby. -However, our approach to integration with Java is different to JRuby so you -should read our [migration guide](doc/user/jruby-migration.md). - -## Documentation - -Extensive documentation is available in [`doc`](doc). -[`doc/user`](doc/user) documents how to use TruffleRuby and -[`doc/contributor`](doc/contributor) documents how to develop TruffleRuby. - -## Contact - -The best way to get in touch with us is to join us in -https://gitter.im/graalvm/truffleruby, but you can also Tweet to -[@TruffleRuby](https://twitter.com/truffleruby), or email -chris.seaton@oracle.com. - -## Mailing list - -Announcements about GraalVM, including TruffleRuby, are made on the -[graal-dev](http://mail.openjdk.java.net/mailman/listinfo/graal-dev) mailing list. - -## Authors - -The main authors of TruffleRuby in order of joining the project are: - -* Chris Seaton -* Benoit Daloze -* Kevin Menard -* Petr Chalupa -* Brandon Fish -* Duncan MacGregor -* Christian Wirth - -Additionally: - -* Thomas Würthinger -* Matthias Grimmer -* Josef Haider -* Fabio Niephaus -* Matthias Springer -* Lucas Allan Amorim -* Aditya Bhardwaj - -Collaborations with: - -* [Institut für Systemsoftware at Johannes Kepler University - Linz](http://ssw.jku.at) - -And others. - -## Security - -See the [security documentation](doc/user/security.md). - -## Licence - -TruffleRuby is copyright (c) 2013-2019 Oracle and/or its affiliates, and is made -available to you under the terms of any one of the following three licenses: - -* Eclipse Public License version 1.0, or -* GNU General Public License version 2, or -* GNU Lesser General Public License version 2.1. - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. - -## Attribution - -TruffleRuby is a fork of [JRuby](https://github.com/jruby/jruby), combining it -with code from the [Rubinius](https://github.com/rubinius/rubinius) project, and -also containing code from the standard implementation of Ruby, -[MRI](https://github.com/ruby/ruby). diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt deleted file mode 100644 index f06056fb45fb..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt +++ /dev/null @@ -1,56 +0,0 @@ -Ruby is copyrighted free software by Yukihiro Matsumoto . -You can redistribute it and/or modify it under either the terms of the -2-clause BSDL (see the file BSDL), or the conditions below: - - 1. You may make and give away verbatim copies of the source form of the - software without restriction, provided that you duplicate all of the - original copyright notices and associated disclaimers. - - 2. You may modify your copy of the software in any way, provided that - you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said - modifications to Usenet or an equivalent medium, or by allowing - the author to include your modifications in the software. - - b) use the modified software only within your corporation or - organization. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 3. You may distribute the software in object code or binary form, - provided that you do at least ONE of the following: - - a) distribute the binaries and library files of the software, - together with instructions (in the manual page or equivalent) - on where to get the original distribution. - - b) accompany the distribution with the machine-readable source of - the software. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 4. You may modify and include the part of the software into any other - software (possibly commercial). But some files in the distribution - are not written by the author, so that they are not under these terms. - - For the list of those files and their copying conditions, see the - file LEGAL. - - 5. The scripts and library files supplied as input to or produced as - output from the software do not automatically fall under the - copyright of the software, but belong to whomever generated them, - and may be sold commercially, and may be aggregated with this - software. - - 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/doc/doc/user/netbeans.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/doc/doc/user/netbeans.md deleted file mode 100644 index 0e9236814854..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/doc/doc/user/netbeans.md +++ /dev/null @@ -1,29 +0,0 @@ -# NetBeans integration - -You can debug Ruby programs running in TruffleRuby using the NetBeans IDE. - -## Setup - -* Install NetBeans 8.2 -* Via Tools, Plugins, install 'Truffle Debugging Support' -* [Install TruffleRuby](installing-graalvm.md) - -We then need a project to debug. An example project that works well and -demonstrates features is available on GitHub: - -``` -$ git clone https://github.com/jtulach/sieve.git -``` - -Open `ruby+js/fromjava` as a NetBeans project. - -* Right click on the project -* Open Properties, Build, Compile, Java Platform -* Manage Java Platforms, Add Platform, and select the GraalVM directory -* Now we can set a breakpoint in Ruby by opening `sieve.rb` and clicking on the - line in `Natural#next` -* Finally, 'Debug Project' - -You will be able to debug the Ruby program as normal, and if you look at the -call stack you'll see that there are also Java and JavaScript frames that you -can debug as well, all inside the same virtual machine and debugger. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/native-image.properties deleted file mode 100644 index 69c2e64ac39f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/native-image.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file contains native-image arguments needed to build truffleruby -# - -ImageName = truffleruby - -Requires = tool:truffle tool:nfi - -LauncherClass = org.truffleruby.launcher.RubyLauncher -LauncherClassPath = languages/ruby/truffleruby-annotations.jar:languages/ruby/truffleruby-shared.jar:lib/graalvm/launcher-common.jar:lib/graalvm/truffleruby-launcher.jar - -Args = -H:MaxRuntimeCompileMethods=5400 \ - -H:+AddAllCharsets - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=ruby \ - -Dorg.graalvm.launcher.relative.llvm.home=../lib/cext/sulong-libs diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/llvm-toolchain/1.1.0.0/jre/languages/ruby/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/MANIFEST.MF deleted file mode 100644 index 144f60b09408..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Name: Graal.Python -Bundle-Symbolic-Name: org.graalvm.python -Bundle-Version: 1.0.0.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.0.0.0 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/python diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/permissions deleted file mode 100644 index c20856a8ebf6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/permissions +++ /dev/null @@ -1,4 +0,0 @@ -jre/languages/python/release = rw-rw-r-- -LICENSE_GRAALPYTHON = rwxrwxrwx -jre/languages/python/README_GRAALPYTHON.md = rw-r--r-- -jre/languages/python/doc/INTEROP.md = rw-r--r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/symlinks deleted file mode 100644 index 6457fbb04174..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/META-INF/symlinks +++ /dev/null @@ -1 +0,0 @@ -LICENSE_GRAALPYTHON = jre/languages/python/LICENSE_GRAALPYTHON diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/LICENSE_GRAALPYTHON b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/LICENSE_GRAALPYTHON deleted file mode 100644 index 773458bc6687..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/LICENSE_GRAALPYTHON +++ /dev/null @@ -1,76 +0,0 @@ -Product License - GraalVM Community Edition 1.0 Python Language -Component - -This is a release of GraalVM Community Edition 1.0 Python Language Component. -This particular copy of the software is released under Universal Permissive -License (UPL) v. 1.0. -Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved - -=========================================================================== - Universal Permissive License v. 1.0. -Copyright (c) 2018, Oracle and/or its affiliates -The Universal Permissive License (UPL), Version 1.0 -Subject to the condition set forth below, permission is hereby granted to any -person obtaining a copy of this software, associated documentation and/or data -(collectively the "Software"), free of charge and under any and all copyright -rights in the Software, and any and all patent rights owned or freely -licensable by each licensor hereunder covering either (i) the unmodified -Software as contributed to or provided by such licensor, or (ii) the Larger -Works (as defined below), to deal in both -(a) the Software, and -(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -one is included with the Software (each a “Larger Work” to which the -Software is contributed by such licensors) -without restriction, including without limitation the rights to copy, create -derivative works of, display, perform, and distribute the Software and make, -use, sell, offer for sale, import, export, have made, and have sold the -Software and the Larger Work(s), and to sublicense the foregoing rights on -either these or other terms. -This license is subject to the following condition: -The above copyright notice and either this complete permission notice or at a -minimum a reference to the UPL must be included in all copies or substantial -portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -=========================================================================== - - WRITTEN OFFER FOR SOURCE CODE -For any software that you receive from Oracle in binary form which is licensed -under an open source license that gives you the right to receive the source -code for that binary, you can obtain a copy of the applicable source code by -visiting http://www.oracle.com/goto/opensourcecode. If the source code for the -binary was not provided to you with the binary, you can also receive a copy of -the source code on physical media by submitting a written request to the -address listed below or by sending an email to Oracle using the following link: - http://www.oracle.com/goto/opensourcecode/request. - -Oracle America, Inc. -Attn: Senior Vice President -Development and Engineering Legal -500 Oracle Parkway, 10th Floor -Redwood Shores, CA 94065 - -Your request should include: - • The name of the binary for which you are requesting the source code - • The name and version number of the Oracle product containing the binary - • The date you received the Oracle product - • Your name - • Your company name (if applicable) - • Your return mailing address and email, and - • A telephone number in the event we need to reach you. - -We may charge you a fee to cover the cost of physical media and processing. -Your request must be sent - a. within three (3) years of the date you received the Oracle product that -included the binary that is the subject of your request, or - b. in the case of code licensed under the GPL v3 for as long as Oracle -offers spare parts or customer support for that product model. - -=========================================================================== - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/doc/INTEROP.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/doc/INTEROP.md deleted file mode 100644 index b687625958c1..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/doc/INTEROP.md +++ /dev/null @@ -1,98 +0,0 @@ -## Interop - -#### Interop from Python - -You can import the `polyglot` module to interact with other languages. - -```python -import polyglot -``` - -You can import a global value from the entire polyglot scope: -```python -imported_polyglot_global = polyglot.import_value("global_name") -``` - -This global should then work as expected; accessing attributes assumes it reads -from the `members` namespace; accessing items is supported both with strings and -numbers; calling methods on the result tries to do a straight invoke and falls -back to reading the member and trying to execute it. - -You can evaluate some code in another language: -```python -polyglot.eval(string="1 + 1", language="ruby") -``` - -It also works with the path to a file: -```python -polyglot.eval(file="./my_ruby_file.rb", language="ruby") -``` - -If you pass a file, you can also try to rely on the file-based language detection: -```python -polyglot.eval(file="./my_ruby_file.rb") -``` - -To export something from Python to other Polyglot languages so they can import -it: -```python -foo = object() -polyglot.export_value(foo, name="python_foo") -``` - -The export function can be used as a decorator, in this case the function name -is used as the globally exported name: -```python -@polyglot.export_value -def python_method(): - return "Hello from Python!" -``` - -Finally, to interoperate with Java (only when running on the JVM), you can use -the `java` module: -```python -import java -BigInteger = java.type("java.math.BigInteger") -myBigInt = BigInteger(42) -myBigInt.shiftLeft(128) # public Java methods can just be called -myBigInt["not"]() # Java method names that are keywords in - # Python can be accessed using "[]" -byteArray = myBigInt.toByteArray() -print(list(byteArray)) # Java arrays can act like Python lists -``` - -For packages under the `java` package, you can also use the normal Python import -syntax: -```python -import java.util.ArrayList -from java.util import ArrayList - -# these are the same class -java.util.ArrayList == ArrayList - -al = ArrayList() -al.add(1) -al.add(12) -print(al) # prints [1, 12] -``` - -In addition to the `type` builtin method, the `java` module, exposes the following -methods as well: - -Builtin | Specification ---- | --- -`instanceof(obj, class)` | returns `True` if `obj` is an instance of `class` (`class` must be a foreign object class) -`is_function(obj)` | returns `True` if `obj` is a Java host language function wrapped using Truffle interop -`is_object(obj)` | returns `True` if `obj` if the argument is Java host language object wrapped using Truffle interop -`is_symbol(obj)` | returns `True` if `obj` if the argument is a Java host symbol, representing the constructor and static members of a Java class, as obtained by `java.type` - -```python -import java -ArrayList = java.type('java.util.ArrayList') -my_list = ArrayList() -print(java.is_symbol(ArrayList)) # prints True -print(java.is_symbol(my_list)) # prints False, my_list is not a Java host symbol -print(java.is_object(ArrayList)) # prints True, symbols are also host objects -print(java.is_function(my_list.add))# prints True, the add method of ArrayList -print(java.instanceof(my_list, ArrayList)) # prints True -``` diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/include/boolobject.h b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/include/boolobject.h deleted file mode 100644 index a93b156a5736..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/include/boolobject.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (c) 2018, Oracle and/or its affiliates. - * Copyright (C) 1996-2017 Python Software Foundation - * - * Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 - */ -/* Boolean object interface */ - -#ifndef Py_BOOLOBJECT_H -#define Py_BOOLOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - - -PyAPI_DATA(PyTypeObject) PyBool_Type; - -#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type) - -/* Py_False and Py_True are the only two bools in existence. -Don't forget to apply Py_INCREF() when returning either!!! */ - -/* Don't use these directly */ -PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct; - -/* Use these macros */ -#define Py_False ((PyObject *) &_Py_FalseStruct) -#define Py_True ((PyObject *) &_Py_TrueStruct) - -/* Macros for returning Py_True or Py_False, respectively */ -#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True -#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False - -/* Function to return a bool from a C long */ -PyAPI_FUNC(PyObject *) PyBool_FromLong(long); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_BOOLOBJECT_H */ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/lib-graalpython/_descriptor.py b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/lib-graalpython/_descriptor.py deleted file mode 100644 index 9b0cf58f94e8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/lib-graalpython/_descriptor.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# The Universal Permissive License (UPL), Version 1.0 -# -# Subject to the condition set forth below, permission is hereby granted to any -# person obtaining a copy of this software, associated documentation and/or -# data (collectively the "Software"), free of charge and under any and all -# copyright rights in the Software, and any and all patent rights owned or -# freely licensable by each licensor hereunder covering either (i) the -# unmodified Software as contributed to or provided by such licensor, or (ii) -# the Larger Works (as defined below), to deal in both -# -# (a) the Software, and -# -# (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -# one is included with the Software each a "Larger Work" to which the Software -# is contributed by such licensors), -# -# without restriction, including without limitation the rights to copy, create -# derivative works of, display, perform, and distribute the Software and make, -# use, sell, offer for sale, import, export, have made, and have sold the -# Software and the Larger Work(s), and to sublicense the foregoing rights on -# either these or other terms. -# -# This license is subject to the following condition: -# -# The above copyright notice and either this complete permission notice or at a -# minimum a reference to the UPL must be included in all copies or substantial -# portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -def _f(): pass -FunctionType = type(_f) -descriptor = type(FunctionType.__code__) - - -def make_named_tuple_class(name, fields): - class named_tuple(tuple): - __name__ = name - n_sequence_fields = len(fields) - fields = fields - - def __str__(self): - return self.__repr__() - - def __repr__(self): - sb = [name, "("] - for f in fields: - sb.append(f) - sb.append("=") - sb.append(repr(getattr(self, f))) - sb.append(", ") - sb.pop() - sb.append(")") - return "".join(sb) - - def _define_named_tuple_methods(): - for i, name in enumerate(fields): - def make_func(i): - def func(self): - return self[i] - return func - setattr(named_tuple, name, descriptor(fget=make_func(i), name=name, owner=named_tuple)) - - - _define_named_tuple_methods() - return named_tuple - - -class SimpleNamespace(object): - def __init__(self, **kwargs): - object.__setattr__(self, "__ns__", kwargs) - - def __delattr__(self, name): - object.__getattribute__(self, "__ns__").__delitem__(name) - - def __getattr__(self, name): - return object.__getattribute__(self, "__ns__")[name] - - def __setattr__(self, name, value): - object.__getattribute__(self, "__ns__")[name] = value - - def __repr__(self): - sb = [] - ns = object.__getattribute__(self, "__ns__") - for k,v in ns.items(): - sb.append("%s='%s'" % (k,v)) - return "namespace(%s)" % ", ".join(sb) diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/lib-python/3/_bootlocale.py b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/lib-python/3/_bootlocale.py deleted file mode 100644 index 32987d6942ae..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/lib-python/3/_bootlocale.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# The Universal Permissive License (UPL), Version 1.0 -# -# Subject to the condition set forth below, permission is hereby granted to any -# person obtaining a copy of this software, associated documentation and/or -# data (collectively the "Software"), free of charge and under any and all -# copyright rights in the Software, and any and all patent rights owned or -# freely licensable by each licensor hereunder covering either (i) the -# unmodified Software as contributed to or provided by such licensor, or (ii) -# the Larger Works (as defined below), to deal in both -# -# (a) the Software, and -# -# (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -# one is included with the Software each a "Larger Work" to which the Software -# is contributed by such licensors), -# -# without restriction, including without limitation the rights to copy, create -# derivative works of, display, perform, and distribute the Software and make, -# use, sell, offer for sale, import, export, have made, and have sold the -# Software and the Larger Work(s), and to sublicense the foregoing rights on -# either these or other terms. -# -# This license is subject to the following condition: -# -# The above copyright notice and either this complete permission notice or at a -# minimum a reference to the UPL must be included in all copies or substantial -# portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -"""A minimal subset of the locale module used at interpreter startup -(imported by the _io module), in order to reduce startup time. - -Don't import directly from third-party code; use the `locale` module instead! -""" - -import sys -import _locale - -if sys.platform.startswith("win"): - def getpreferredencoding(do_setlocale=True): - if sys.flags.utf8_mode: - return 'UTF-8' - return _locale._getdefaultlocale()[1] -else: - try: - _locale.CODESET - except AttributeError: - if hasattr(sys, 'getandroidapilevel'): - # On Android langinfo.h and CODESET are missing, and UTF-8 is - # always used in mbstowcs() and wcstombs(). - def getpreferredencoding(do_setlocale=True): - return 'UTF-8' - else: - def getpreferredencoding(do_setlocale=True): - if sys.flags.utf8_mode: - return 'UTF-8' - # This path for legacy systems needs the more complex - # getdefaultlocale() function, import the full locale module. - import locale - return locale.getpreferredencoding(do_setlocale) - else: - def getpreferredencoding(do_setlocale=True): - assert not do_setlocale - if sys.flags.utf8_mode: - return 'UTF-8' - result = _locale.nl_langinfo(_locale.CODESET) - if not result and sys.platform == 'darwin': - # nl_langinfo can return an empty string - # when the setting has an invalid value. - # Default to UTF-8 in that case because - # UTF-8 is the default charset on OSX and - # returning nothing will crash the - # interpreter. - result = 'UTF-8' - return result diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/native-image.properties deleted file mode 100644 index bb816bb158d7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/native-image.properties +++ /dev/null @@ -1,13 +0,0 @@ -# This file contains native-image arguments needed to build graalpython -# - -ImageName = graalpython - -Requires = tool:regex language:llvm - -LauncherClass = com.oracle.graal.python.shell.GraalPythonMain -LauncherClassPath = lib/graalvm/launcher-common.jar:lib/graalvm/graalpython-launcher.jar - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=python - -Args = -H:MaxRuntimeCompileMethods=7000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.0.0/jre/languages/python/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/MANIFEST.MF deleted file mode 100644 index 331bdd6046b6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Name: Graal.Python -Bundle-Symbolic-Name: org.graalvm.python -Bundle-Version: 1.0.1.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.0.1.0 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/python diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/permissions deleted file mode 100644 index c20856a8ebf6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/permissions +++ /dev/null @@ -1,4 +0,0 @@ -jre/languages/python/release = rw-rw-r-- -LICENSE_GRAALPYTHON = rwxrwxrwx -jre/languages/python/README_GRAALPYTHON.md = rw-r--r-- -jre/languages/python/doc/INTEROP.md = rw-r--r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/symlinks deleted file mode 100644 index 6457fbb04174..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/META-INF/symlinks +++ /dev/null @@ -1 +0,0 @@ -LICENSE_GRAALPYTHON = jre/languages/python/LICENSE_GRAALPYTHON diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/LICENSE_GRAALPYTHON b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/LICENSE_GRAALPYTHON deleted file mode 100644 index 773458bc6687..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/LICENSE_GRAALPYTHON +++ /dev/null @@ -1,76 +0,0 @@ -Product License - GraalVM Community Edition 1.0 Python Language -Component - -This is a release of GraalVM Community Edition 1.0 Python Language Component. -This particular copy of the software is released under Universal Permissive -License (UPL) v. 1.0. -Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved - -=========================================================================== - Universal Permissive License v. 1.0. -Copyright (c) 2018, Oracle and/or its affiliates -The Universal Permissive License (UPL), Version 1.0 -Subject to the condition set forth below, permission is hereby granted to any -person obtaining a copy of this software, associated documentation and/or data -(collectively the "Software"), free of charge and under any and all copyright -rights in the Software, and any and all patent rights owned or freely -licensable by each licensor hereunder covering either (i) the unmodified -Software as contributed to or provided by such licensor, or (ii) the Larger -Works (as defined below), to deal in both -(a) the Software, and -(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -one is included with the Software (each a “Larger Work” to which the -Software is contributed by such licensors) -without restriction, including without limitation the rights to copy, create -derivative works of, display, perform, and distribute the Software and make, -use, sell, offer for sale, import, export, have made, and have sold the -Software and the Larger Work(s), and to sublicense the foregoing rights on -either these or other terms. -This license is subject to the following condition: -The above copyright notice and either this complete permission notice or at a -minimum a reference to the UPL must be included in all copies or substantial -portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -=========================================================================== - - WRITTEN OFFER FOR SOURCE CODE -For any software that you receive from Oracle in binary form which is licensed -under an open source license that gives you the right to receive the source -code for that binary, you can obtain a copy of the applicable source code by -visiting http://www.oracle.com/goto/opensourcecode. If the source code for the -binary was not provided to you with the binary, you can also receive a copy of -the source code on physical media by submitting a written request to the -address listed below or by sending an email to Oracle using the following link: - http://www.oracle.com/goto/opensourcecode/request. - -Oracle America, Inc. -Attn: Senior Vice President -Development and Engineering Legal -500 Oracle Parkway, 10th Floor -Redwood Shores, CA 94065 - -Your request should include: - • The name of the binary for which you are requesting the source code - • The name and version number of the Oracle product containing the binary - • The date you received the Oracle product - • Your name - • Your company name (if applicable) - • Your return mailing address and email, and - • A telephone number in the event we need to reach you. - -We may charge you a fee to cover the cost of physical media and processing. -Your request must be sent - a. within three (3) years of the date you received the Oracle product that -included the binary that is the subject of your request, or - b. in the case of code licensed under the GPL v3 for as long as Oracle -offers spare parts or customer support for that product model. - -=========================================================================== - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/doc/INTEROP.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/doc/INTEROP.md deleted file mode 100644 index b687625958c1..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/doc/INTEROP.md +++ /dev/null @@ -1,98 +0,0 @@ -## Interop - -#### Interop from Python - -You can import the `polyglot` module to interact with other languages. - -```python -import polyglot -``` - -You can import a global value from the entire polyglot scope: -```python -imported_polyglot_global = polyglot.import_value("global_name") -``` - -This global should then work as expected; accessing attributes assumes it reads -from the `members` namespace; accessing items is supported both with strings and -numbers; calling methods on the result tries to do a straight invoke and falls -back to reading the member and trying to execute it. - -You can evaluate some code in another language: -```python -polyglot.eval(string="1 + 1", language="ruby") -``` - -It also works with the path to a file: -```python -polyglot.eval(file="./my_ruby_file.rb", language="ruby") -``` - -If you pass a file, you can also try to rely on the file-based language detection: -```python -polyglot.eval(file="./my_ruby_file.rb") -``` - -To export something from Python to other Polyglot languages so they can import -it: -```python -foo = object() -polyglot.export_value(foo, name="python_foo") -``` - -The export function can be used as a decorator, in this case the function name -is used as the globally exported name: -```python -@polyglot.export_value -def python_method(): - return "Hello from Python!" -``` - -Finally, to interoperate with Java (only when running on the JVM), you can use -the `java` module: -```python -import java -BigInteger = java.type("java.math.BigInteger") -myBigInt = BigInteger(42) -myBigInt.shiftLeft(128) # public Java methods can just be called -myBigInt["not"]() # Java method names that are keywords in - # Python can be accessed using "[]" -byteArray = myBigInt.toByteArray() -print(list(byteArray)) # Java arrays can act like Python lists -``` - -For packages under the `java` package, you can also use the normal Python import -syntax: -```python -import java.util.ArrayList -from java.util import ArrayList - -# these are the same class -java.util.ArrayList == ArrayList - -al = ArrayList() -al.add(1) -al.add(12) -print(al) # prints [1, 12] -``` - -In addition to the `type` builtin method, the `java` module, exposes the following -methods as well: - -Builtin | Specification ---- | --- -`instanceof(obj, class)` | returns `True` if `obj` is an instance of `class` (`class` must be a foreign object class) -`is_function(obj)` | returns `True` if `obj` is a Java host language function wrapped using Truffle interop -`is_object(obj)` | returns `True` if `obj` if the argument is Java host language object wrapped using Truffle interop -`is_symbol(obj)` | returns `True` if `obj` if the argument is a Java host symbol, representing the constructor and static members of a Java class, as obtained by `java.type` - -```python -import java -ArrayList = java.type('java.util.ArrayList') -my_list = ArrayList() -print(java.is_symbol(ArrayList)) # prints True -print(java.is_symbol(my_list)) # prints False, my_list is not a Java host symbol -print(java.is_object(ArrayList)) # prints True, symbols are also host objects -print(java.is_function(my_list.add))# prints True, the add method of ArrayList -print(java.instanceof(my_list, ArrayList)) # prints True -``` diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/include/boolobject.h b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/include/boolobject.h deleted file mode 100644 index a93b156a5736..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/include/boolobject.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (c) 2018, Oracle and/or its affiliates. - * Copyright (C) 1996-2017 Python Software Foundation - * - * Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 - */ -/* Boolean object interface */ - -#ifndef Py_BOOLOBJECT_H -#define Py_BOOLOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - - -PyAPI_DATA(PyTypeObject) PyBool_Type; - -#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type) - -/* Py_False and Py_True are the only two bools in existence. -Don't forget to apply Py_INCREF() when returning either!!! */ - -/* Don't use these directly */ -PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct; - -/* Use these macros */ -#define Py_False ((PyObject *) &_Py_FalseStruct) -#define Py_True ((PyObject *) &_Py_TrueStruct) - -/* Macros for returning Py_True or Py_False, respectively */ -#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True -#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False - -/* Function to return a bool from a C long */ -PyAPI_FUNC(PyObject *) PyBool_FromLong(long); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_BOOLOBJECT_H */ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/lib-graalpython/_descriptor.py b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/lib-graalpython/_descriptor.py deleted file mode 100644 index 9b0cf58f94e8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/lib-graalpython/_descriptor.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# The Universal Permissive License (UPL), Version 1.0 -# -# Subject to the condition set forth below, permission is hereby granted to any -# person obtaining a copy of this software, associated documentation and/or -# data (collectively the "Software"), free of charge and under any and all -# copyright rights in the Software, and any and all patent rights owned or -# freely licensable by each licensor hereunder covering either (i) the -# unmodified Software as contributed to or provided by such licensor, or (ii) -# the Larger Works (as defined below), to deal in both -# -# (a) the Software, and -# -# (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -# one is included with the Software each a "Larger Work" to which the Software -# is contributed by such licensors), -# -# without restriction, including without limitation the rights to copy, create -# derivative works of, display, perform, and distribute the Software and make, -# use, sell, offer for sale, import, export, have made, and have sold the -# Software and the Larger Work(s), and to sublicense the foregoing rights on -# either these or other terms. -# -# This license is subject to the following condition: -# -# The above copyright notice and either this complete permission notice or at a -# minimum a reference to the UPL must be included in all copies or substantial -# portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -def _f(): pass -FunctionType = type(_f) -descriptor = type(FunctionType.__code__) - - -def make_named_tuple_class(name, fields): - class named_tuple(tuple): - __name__ = name - n_sequence_fields = len(fields) - fields = fields - - def __str__(self): - return self.__repr__() - - def __repr__(self): - sb = [name, "("] - for f in fields: - sb.append(f) - sb.append("=") - sb.append(repr(getattr(self, f))) - sb.append(", ") - sb.pop() - sb.append(")") - return "".join(sb) - - def _define_named_tuple_methods(): - for i, name in enumerate(fields): - def make_func(i): - def func(self): - return self[i] - return func - setattr(named_tuple, name, descriptor(fget=make_func(i), name=name, owner=named_tuple)) - - - _define_named_tuple_methods() - return named_tuple - - -class SimpleNamespace(object): - def __init__(self, **kwargs): - object.__setattr__(self, "__ns__", kwargs) - - def __delattr__(self, name): - object.__getattribute__(self, "__ns__").__delitem__(name) - - def __getattr__(self, name): - return object.__getattribute__(self, "__ns__")[name] - - def __setattr__(self, name, value): - object.__getattribute__(self, "__ns__")[name] = value - - def __repr__(self): - sb = [] - ns = object.__getattribute__(self, "__ns__") - for k,v in ns.items(): - sb.append("%s='%s'" % (k,v)) - return "namespace(%s)" % ", ".join(sb) diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/lib-python/3/_bootlocale.py b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/lib-python/3/_bootlocale.py deleted file mode 100644 index 32987d6942ae..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/lib-python/3/_bootlocale.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# The Universal Permissive License (UPL), Version 1.0 -# -# Subject to the condition set forth below, permission is hereby granted to any -# person obtaining a copy of this software, associated documentation and/or -# data (collectively the "Software"), free of charge and under any and all -# copyright rights in the Software, and any and all patent rights owned or -# freely licensable by each licensor hereunder covering either (i) the -# unmodified Software as contributed to or provided by such licensor, or (ii) -# the Larger Works (as defined below), to deal in both -# -# (a) the Software, and -# -# (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -# one is included with the Software each a "Larger Work" to which the Software -# is contributed by such licensors), -# -# without restriction, including without limitation the rights to copy, create -# derivative works of, display, perform, and distribute the Software and make, -# use, sell, offer for sale, import, export, have made, and have sold the -# Software and the Larger Work(s), and to sublicense the foregoing rights on -# either these or other terms. -# -# This license is subject to the following condition: -# -# The above copyright notice and either this complete permission notice or at a -# minimum a reference to the UPL must be included in all copies or substantial -# portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -"""A minimal subset of the locale module used at interpreter startup -(imported by the _io module), in order to reduce startup time. - -Don't import directly from third-party code; use the `locale` module instead! -""" - -import sys -import _locale - -if sys.platform.startswith("win"): - def getpreferredencoding(do_setlocale=True): - if sys.flags.utf8_mode: - return 'UTF-8' - return _locale._getdefaultlocale()[1] -else: - try: - _locale.CODESET - except AttributeError: - if hasattr(sys, 'getandroidapilevel'): - # On Android langinfo.h and CODESET are missing, and UTF-8 is - # always used in mbstowcs() and wcstombs(). - def getpreferredencoding(do_setlocale=True): - return 'UTF-8' - else: - def getpreferredencoding(do_setlocale=True): - if sys.flags.utf8_mode: - return 'UTF-8' - # This path for legacy systems needs the more complex - # getdefaultlocale() function, import the full locale module. - import locale - return locale.getpreferredencoding(do_setlocale) - else: - def getpreferredencoding(do_setlocale=True): - assert not do_setlocale - if sys.flags.utf8_mode: - return 'UTF-8' - result = _locale.nl_langinfo(_locale.CODESET) - if not result and sys.platform == 'darwin': - # nl_langinfo can return an empty string - # when the setting has an invalid value. - # Default to UTF-8 in that case because - # UTF-8 is the default charset on OSX and - # returning nothing will crash the - # interpreter. - result = 'UTF-8' - return result diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/native-image.properties deleted file mode 100644 index 2492501f8012..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/native-image.properties +++ /dev/null @@ -1,13 +0,0 @@ -# This file contains native-image arguments needed to build graalpython -# - -ImageName = graalpython - -Requires = tool:regex language:llvm - -LauncherClass = com.oracle.graal.python.shell.GraalPythonMain -LauncherClassPath = lib/graalvm/launcher-common.jar:lib/graalvm/graalpython-launcher.jar - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=python - -Args = -H:MaxRuntimeCompileMethods=7000 \ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.0.1.0/jre/languages/python/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/MANIFEST.MF deleted file mode 100644 index eaf3354efcf8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,6 +0,0 @@ -Bundle-Name: Graal.Python -Bundle-Symbolic-Name: org.graalvm.python -Bundle-Version: 1.1.0.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.1.0.0 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/python diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/permissions deleted file mode 100644 index c20856a8ebf6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/permissions +++ /dev/null @@ -1,4 +0,0 @@ -jre/languages/python/release = rw-rw-r-- -LICENSE_GRAALPYTHON = rwxrwxrwx -jre/languages/python/README_GRAALPYTHON.md = rw-r--r-- -jre/languages/python/doc/INTEROP.md = rw-r--r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/symlinks deleted file mode 100644 index 6457fbb04174..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/META-INF/symlinks +++ /dev/null @@ -1 +0,0 @@ -LICENSE_GRAALPYTHON = jre/languages/python/LICENSE_GRAALPYTHON diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/LICENSE_GRAALPYTHON b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/LICENSE_GRAALPYTHON deleted file mode 100644 index 773458bc6687..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/LICENSE_GRAALPYTHON +++ /dev/null @@ -1,76 +0,0 @@ -Product License - GraalVM Community Edition 1.0 Python Language -Component - -This is a release of GraalVM Community Edition 1.0 Python Language Component. -This particular copy of the software is released under Universal Permissive -License (UPL) v. 1.0. -Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved - -=========================================================================== - Universal Permissive License v. 1.0. -Copyright (c) 2018, Oracle and/or its affiliates -The Universal Permissive License (UPL), Version 1.0 -Subject to the condition set forth below, permission is hereby granted to any -person obtaining a copy of this software, associated documentation and/or data -(collectively the "Software"), free of charge and under any and all copyright -rights in the Software, and any and all patent rights owned or freely -licensable by each licensor hereunder covering either (i) the unmodified -Software as contributed to or provided by such licensor, or (ii) the Larger -Works (as defined below), to deal in both -(a) the Software, and -(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -one is included with the Software (each a “Larger Work” to which the -Software is contributed by such licensors) -without restriction, including without limitation the rights to copy, create -derivative works of, display, perform, and distribute the Software and make, -use, sell, offer for sale, import, export, have made, and have sold the -Software and the Larger Work(s), and to sublicense the foregoing rights on -either these or other terms. -This license is subject to the following condition: -The above copyright notice and either this complete permission notice or at a -minimum a reference to the UPL must be included in all copies or substantial -portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -=========================================================================== - - WRITTEN OFFER FOR SOURCE CODE -For any software that you receive from Oracle in binary form which is licensed -under an open source license that gives you the right to receive the source -code for that binary, you can obtain a copy of the applicable source code by -visiting http://www.oracle.com/goto/opensourcecode. If the source code for the -binary was not provided to you with the binary, you can also receive a copy of -the source code on physical media by submitting a written request to the -address listed below or by sending an email to Oracle using the following link: - http://www.oracle.com/goto/opensourcecode/request. - -Oracle America, Inc. -Attn: Senior Vice President -Development and Engineering Legal -500 Oracle Parkway, 10th Floor -Redwood Shores, CA 94065 - -Your request should include: - • The name of the binary for which you are requesting the source code - • The name and version number of the Oracle product containing the binary - • The date you received the Oracle product - • Your name - • Your company name (if applicable) - • Your return mailing address and email, and - • A telephone number in the event we need to reach you. - -We may charge you a fee to cover the cost of physical media and processing. -Your request must be sent - a. within three (3) years of the date you received the Oracle product that -included the binary that is the subject of your request, or - b. in the case of code licensed under the GPL v3 for as long as Oracle -offers spare parts or customer support for that product model. - -=========================================================================== - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/doc/INTEROP.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/doc/INTEROP.md deleted file mode 100644 index b687625958c1..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/doc/INTEROP.md +++ /dev/null @@ -1,98 +0,0 @@ -## Interop - -#### Interop from Python - -You can import the `polyglot` module to interact with other languages. - -```python -import polyglot -``` - -You can import a global value from the entire polyglot scope: -```python -imported_polyglot_global = polyglot.import_value("global_name") -``` - -This global should then work as expected; accessing attributes assumes it reads -from the `members` namespace; accessing items is supported both with strings and -numbers; calling methods on the result tries to do a straight invoke and falls -back to reading the member and trying to execute it. - -You can evaluate some code in another language: -```python -polyglot.eval(string="1 + 1", language="ruby") -``` - -It also works with the path to a file: -```python -polyglot.eval(file="./my_ruby_file.rb", language="ruby") -``` - -If you pass a file, you can also try to rely on the file-based language detection: -```python -polyglot.eval(file="./my_ruby_file.rb") -``` - -To export something from Python to other Polyglot languages so they can import -it: -```python -foo = object() -polyglot.export_value(foo, name="python_foo") -``` - -The export function can be used as a decorator, in this case the function name -is used as the globally exported name: -```python -@polyglot.export_value -def python_method(): - return "Hello from Python!" -``` - -Finally, to interoperate with Java (only when running on the JVM), you can use -the `java` module: -```python -import java -BigInteger = java.type("java.math.BigInteger") -myBigInt = BigInteger(42) -myBigInt.shiftLeft(128) # public Java methods can just be called -myBigInt["not"]() # Java method names that are keywords in - # Python can be accessed using "[]" -byteArray = myBigInt.toByteArray() -print(list(byteArray)) # Java arrays can act like Python lists -``` - -For packages under the `java` package, you can also use the normal Python import -syntax: -```python -import java.util.ArrayList -from java.util import ArrayList - -# these are the same class -java.util.ArrayList == ArrayList - -al = ArrayList() -al.add(1) -al.add(12) -print(al) # prints [1, 12] -``` - -In addition to the `type` builtin method, the `java` module, exposes the following -methods as well: - -Builtin | Specification ---- | --- -`instanceof(obj, class)` | returns `True` if `obj` is an instance of `class` (`class` must be a foreign object class) -`is_function(obj)` | returns `True` if `obj` is a Java host language function wrapped using Truffle interop -`is_object(obj)` | returns `True` if `obj` if the argument is Java host language object wrapped using Truffle interop -`is_symbol(obj)` | returns `True` if `obj` if the argument is a Java host symbol, representing the constructor and static members of a Java class, as obtained by `java.type` - -```python -import java -ArrayList = java.type('java.util.ArrayList') -my_list = ArrayList() -print(java.is_symbol(ArrayList)) # prints True -print(java.is_symbol(my_list)) # prints False, my_list is not a Java host symbol -print(java.is_object(ArrayList)) # prints True, symbols are also host objects -print(java.is_function(my_list.add))# prints True, the add method of ArrayList -print(java.instanceof(my_list, ArrayList)) # prints True -``` diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/include/boolobject.h b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/include/boolobject.h deleted file mode 100644 index a93b156a5736..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/include/boolobject.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (c) 2018, Oracle and/or its affiliates. - * Copyright (C) 1996-2017 Python Software Foundation - * - * Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 - */ -/* Boolean object interface */ - -#ifndef Py_BOOLOBJECT_H -#define Py_BOOLOBJECT_H -#ifdef __cplusplus -extern "C" { -#endif - - -PyAPI_DATA(PyTypeObject) PyBool_Type; - -#define PyBool_Check(x) (Py_TYPE(x) == &PyBool_Type) - -/* Py_False and Py_True are the only two bools in existence. -Don't forget to apply Py_INCREF() when returning either!!! */ - -/* Don't use these directly */ -PyAPI_DATA(struct _longobject) _Py_FalseStruct, _Py_TrueStruct; - -/* Use these macros */ -#define Py_False ((PyObject *) &_Py_FalseStruct) -#define Py_True ((PyObject *) &_Py_TrueStruct) - -/* Macros for returning Py_True or Py_False, respectively */ -#define Py_RETURN_TRUE return Py_INCREF(Py_True), Py_True -#define Py_RETURN_FALSE return Py_INCREF(Py_False), Py_False - -/* Function to return a bool from a C long */ -PyAPI_FUNC(PyObject *) PyBool_FromLong(long); - -#ifdef __cplusplus -} -#endif -#endif /* !Py_BOOLOBJECT_H */ diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/lib-graalpython/_descriptor.py b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/lib-graalpython/_descriptor.py deleted file mode 100644 index 9b0cf58f94e8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/lib-graalpython/_descriptor.py +++ /dev/null @@ -1,96 +0,0 @@ -# Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# The Universal Permissive License (UPL), Version 1.0 -# -# Subject to the condition set forth below, permission is hereby granted to any -# person obtaining a copy of this software, associated documentation and/or -# data (collectively the "Software"), free of charge and under any and all -# copyright rights in the Software, and any and all patent rights owned or -# freely licensable by each licensor hereunder covering either (i) the -# unmodified Software as contributed to or provided by such licensor, or (ii) -# the Larger Works (as defined below), to deal in both -# -# (a) the Software, and -# -# (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -# one is included with the Software each a "Larger Work" to which the Software -# is contributed by such licensors), -# -# without restriction, including without limitation the rights to copy, create -# derivative works of, display, perform, and distribute the Software and make, -# use, sell, offer for sale, import, export, have made, and have sold the -# Software and the Larger Work(s), and to sublicense the foregoing rights on -# either these or other terms. -# -# This license is subject to the following condition: -# -# The above copyright notice and either this complete permission notice or at a -# minimum a reference to the UPL must be included in all copies or substantial -# portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -def _f(): pass -FunctionType = type(_f) -descriptor = type(FunctionType.__code__) - - -def make_named_tuple_class(name, fields): - class named_tuple(tuple): - __name__ = name - n_sequence_fields = len(fields) - fields = fields - - def __str__(self): - return self.__repr__() - - def __repr__(self): - sb = [name, "("] - for f in fields: - sb.append(f) - sb.append("=") - sb.append(repr(getattr(self, f))) - sb.append(", ") - sb.pop() - sb.append(")") - return "".join(sb) - - def _define_named_tuple_methods(): - for i, name in enumerate(fields): - def make_func(i): - def func(self): - return self[i] - return func - setattr(named_tuple, name, descriptor(fget=make_func(i), name=name, owner=named_tuple)) - - - _define_named_tuple_methods() - return named_tuple - - -class SimpleNamespace(object): - def __init__(self, **kwargs): - object.__setattr__(self, "__ns__", kwargs) - - def __delattr__(self, name): - object.__getattribute__(self, "__ns__").__delitem__(name) - - def __getattr__(self, name): - return object.__getattribute__(self, "__ns__")[name] - - def __setattr__(self, name, value): - object.__getattribute__(self, "__ns__")[name] = value - - def __repr__(self): - sb = [] - ns = object.__getattribute__(self, "__ns__") - for k,v in ns.items(): - sb.append("%s='%s'" % (k,v)) - return "namespace(%s)" % ", ".join(sb) diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/lib-python/3/_bootlocale.py b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/lib-python/3/_bootlocale.py deleted file mode 100644 index 32987d6942ae..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/lib-python/3/_bootlocale.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. -# -# The Universal Permissive License (UPL), Version 1.0 -# -# Subject to the condition set forth below, permission is hereby granted to any -# person obtaining a copy of this software, associated documentation and/or -# data (collectively the "Software"), free of charge and under any and all -# copyright rights in the Software, and any and all patent rights owned or -# freely licensable by each licensor hereunder covering either (i) the -# unmodified Software as contributed to or provided by such licensor, or (ii) -# the Larger Works (as defined below), to deal in both -# -# (a) the Software, and -# -# (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if -# one is included with the Software each a "Larger Work" to which the Software -# is contributed by such licensors), -# -# without restriction, including without limitation the rights to copy, create -# derivative works of, display, perform, and distribute the Software and make, -# use, sell, offer for sale, import, export, have made, and have sold the -# Software and the Larger Work(s), and to sublicense the foregoing rights on -# either these or other terms. -# -# This license is subject to the following condition: -# -# The above copyright notice and either this complete permission notice or at a -# minimum a reference to the UPL must be included in all copies or substantial -# portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -"""A minimal subset of the locale module used at interpreter startup -(imported by the _io module), in order to reduce startup time. - -Don't import directly from third-party code; use the `locale` module instead! -""" - -import sys -import _locale - -if sys.platform.startswith("win"): - def getpreferredencoding(do_setlocale=True): - if sys.flags.utf8_mode: - return 'UTF-8' - return _locale._getdefaultlocale()[1] -else: - try: - _locale.CODESET - except AttributeError: - if hasattr(sys, 'getandroidapilevel'): - # On Android langinfo.h and CODESET are missing, and UTF-8 is - # always used in mbstowcs() and wcstombs(). - def getpreferredencoding(do_setlocale=True): - return 'UTF-8' - else: - def getpreferredencoding(do_setlocale=True): - if sys.flags.utf8_mode: - return 'UTF-8' - # This path for legacy systems needs the more complex - # getdefaultlocale() function, import the full locale module. - import locale - return locale.getpreferredencoding(do_setlocale) - else: - def getpreferredencoding(do_setlocale=True): - assert not do_setlocale - if sys.flags.utf8_mode: - return 'UTF-8' - result = _locale.nl_langinfo(_locale.CODESET) - if not result and sys.platform == 'darwin': - # nl_langinfo can return an empty string - # when the setting has an invalid value. - # Default to UTF-8 in that case because - # UTF-8 is the default charset on OSX and - # returning nothing will crash the - # interpreter. - result = 'UTF-8' - return result diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/native-image.properties deleted file mode 100644 index bb816bb158d7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/native-image.properties +++ /dev/null @@ -1,13 +0,0 @@ -# This file contains native-image arguments needed to build graalpython -# - -ImageName = graalpython - -Requires = tool:regex language:llvm - -LauncherClass = com.oracle.graal.python.shell.GraalPythonMain -LauncherClassPath = lib/graalvm/launcher-common.jar:lib/graalvm/graalpython-launcher.jar - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=python - -Args = -H:MaxRuntimeCompileMethods=7000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/python/1.1.0.0/jre/languages/python/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/MANIFEST.MF deleted file mode 100644 index f995326cd3fa..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,24 +0,0 @@ -Bundle-Name: FastR -Bundle-Symbolic-Name: org.graalvm.R -Bundle-Version: 1.0.1.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.0.1.0 - )(os_name=macos)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/R -x-GraalVM-Message-PostInst: NOTES:\n---------------\nSome R packages nee - d a system-dependent configuration before they can be installed. A gener - ic configuration that works out of the box in most cases is provided by - default. If you wish to fine-tune the configuration to your system or sh - ould you encounter any issues during R package installation, try running - the following script that adjusts the configuration to your system: \n - ${graalvm_home}/jre/languages/R/bin/configure_fastr\n\nThe R componen - t comes without native image by default. If you wish to build the native - image, which provides faster startup, but slightly slower peak performa - nce, then run the following:\n ${graalvm_home}/jre/languages/R/bin/ins - tall_r_native_image\n\nThe native image is then used by default. Pass '- - -jvm' flag to the R or Rscript launcher to use JVM instead of the native - image. Note that the native image is not stable yet and is intended for - evaluation purposes and experiments. Some features may not work when th - e native image is installed, most notably the --polyglot switch. The nat - ive image can be uninstalled using the installation script with 'uninsta - ll' argument.\n\nSee http://www.graalvm.org/docs/reference-manual/langua - ges/r for more. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/permissions deleted file mode 100644 index 14fe1475669d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/permissions +++ /dev/null @@ -1,1622 +0,0 @@ -jre/languages/R/bin/R = rwxr-xr-x -jre/languages/R/bin/Rdconv = rwxr-xr-x -jre/languages/R/bin/SHLIB = rwxr-xr-x -jre/languages/R/bin/COMPILE = rwxr-xr-x -jre/languages/R/bin/LINK = rwxr-xr-x -jre/languages/R/bin/Sweave = rwxr-xr-x -jre/languages/R/bin/BATCH = rwxr-xr-x -jre/languages/R/bin/install_r_native_image = rwxr-xr-x -jre/languages/R/bin/f77_f2c = rwxr-xr-x -jre/languages/R/bin/build = rwxr-xr-x -jre/languages/R/bin/mkinstalldirs = rwxr-xr-x -jre/languages/R/bin/Rdiff = rwxr-xr-x -jre/languages/R/bin/check = rwxr-xr-x -jre/languages/R/bin/Stangle = rwxr-xr-x -jre/languages/R/bin/pager = rwxr-xr-x -jre/languages/R/include/S.h = rw-r--r-- -jre/languages/R/include/Rinternals.h = rw-r--r-- -jre/languages/R/include/Makefile = rw-r--r-- -jre/languages/R/include/Rembedded.h = rw-r--r-- -jre/languages/R/include/Rconfig.h = rw-r--r-- -jre/languages/R/include/Rdefines.h = rw-r--r-- -jre/languages/R/include/linked = rw-r--r-- -jre/languages/R/include/Rmath.h = rw-r--r-- -jre/languages/R/include/R.h = rw-r--r-- -jre/languages/R/include/Rversion.h = rw-r--r-- -jre/languages/R/include/Rinterface.h = rw-r--r-- -jre/languages/R/include/R_ext/GraphicsEngine.h = rw-r--r-- -jre/languages/R/include/R_ext/R-ftp-http.h = rw-r--r-- -jre/languages/R/include/R_ext/Error.h = rw-r--r-- -jre/languages/R/include/R_ext/Itermacros.h = rw-r--r-- -jre/languages/R/include/R_ext/Utils.h = rw-r--r-- -jre/languages/R/include/R_ext/stats_stubs.h = rw-r--r-- -jre/languages/R/include/R_ext/GetX11Image.h = rw-r--r-- -jre/languages/R/include/R_ext/GraphicsDevice.h = rw-r--r-- -jre/languages/R/include/R_ext/Callbacks.h = rw-r--r-- -jre/languages/R/include/R_ext/Rdynload.h = rw-r--r-- -jre/languages/R/include/R_ext/Parse.h = rw-r--r-- -jre/languages/R/include/R_ext/RS.h = rw-r--r-- -jre/languages/R/include/R_ext/BLAS.h = rw-r--r-- -jre/languages/R/include/R_ext/Arith.h = rw-r--r-- -jre/languages/R/include/R_ext/Boolean.h = rw-r--r-- -jre/languages/R/include/R_ext/Applic.h = rw-r--r-- -jre/languages/R/include/R_ext/Linpack.h = rw-r--r-- -jre/languages/R/include/R_ext/Constants.h = rw-r--r-- -jre/languages/R/include/R_ext/Riconv.h = rw-r--r-- -jre/languages/R/include/R_ext/RStartup.h = rw-r--r-- -jre/languages/R/include/R_ext/Print.h = rw-r--r-- -jre/languages/R/include/R_ext/QuartzDevice.h = rw-r--r-- -jre/languages/R/include/R_ext/libextern.h = rw-r--r-- -jre/languages/R/include/R_ext/MathThreads.h = rw-r--r-- -jre/languages/R/include/R_ext/Memory.h = rw-r--r-- -jre/languages/R/include/R_ext/Connections.h = rw-r--r-- -jre/languages/R/include/R_ext/PrtUtil.h = rw-r--r-- -jre/languages/R/include/R_ext/Altrep.h = rw-r--r-- -jre/languages/R/include/R_ext/Rallocators.h = rw-r--r-- -jre/languages/R/include/R_ext/Visibility.h = rw-r--r-- -jre/languages/R/include/R_ext/stats_package.h = rw-r--r-- -jre/languages/R/include/R_ext/Complex.h = rw-r--r-- -jre/languages/R/include/R_ext/Lapack.h = rw-r--r-- -jre/languages/R/include/R_ext/Random.h = rw-r--r-- -jre/languages/R/include/R_ext/eventloop.h = rw-r--r-- -jre/languages/R/lib/libgfortran.dylib = rwxrwxrwx -jre/languages/R/lib/libz.dylib = rwxrwxrwx -jre/languages/R/lib/libpcre.1.dylib = rw-r--r-- -jre/languages/R/lib/libRblas.dylib = rwxr-xr-x -jre/languages/R/lib/libpcre.dylib = rwxrwxrwx -jre/languages/R/lib/libgfortran.3.dylib = rw-r--r-- -jre/languages/R/lib/libgcc_s.dylib = rwxrwxrwx -jre/languages/R/lib/libR.dylib = rwxr-xr-x -jre/languages/R/lib/libquadmath.0.dylib = rw-r--r-- -jre/languages/R/lib/libz.1.dylib = rw-r--r-- -jre/languages/R/lib/libgcc_s.1.dylib = rw-r--r-- -jre/languages/R/lib/libRlapack.dylib = rwxr-xr-x -jre/languages/R/lib/libquadmath.dylib = rwxrwxrwx -jre/languages/R/library/MASS/CITATION = rw-r--r-- -jre/languages/R/library/MASS/NAMESPACE = rw-r--r-- -jre/languages/R/library/MASS/DESCRIPTION = rw-r--r-- -jre/languages/R/library/MASS/NEWS = rw-r--r-- -jre/languages/R/library/MASS/INDEX = rw-r--r-- -jre/languages/R/library/MASS/R/profiles.R = rw-r--r-- -jre/languages/R/library/MASS/R/write.matrix.R = rw-r--r-- -jre/languages/R/library/MASS/R/MASS.rdx = rw-r--r-- -jre/languages/R/library/MASS/R/corresp.R = rw-r--r-- -jre/languages/R/library/MASS/R/fitdistr.R = rw-r--r-- -jre/languages/R/library/MASS/R/sammon.R = rw-r--r-- -jre/languages/R/library/MASS/R/logtrans.R = rw-r--r-- -jre/languages/R/library/MASS/R/MASS = rw-r--r-- -jre/languages/R/library/MASS/R/MASS.rdb = rw-r--r-- -jre/languages/R/library/MASS/R/dose.p.R = rw-r--r-- -jre/languages/R/library/MASS/R/stdres.R = rw-r--r-- -jre/languages/R/library/MASS/R/enlist.R = rw-r--r-- -jre/languages/R/library/MASS/R/add.R = rw-r--r-- -jre/languages/R/library/MASS/R/neg.bin.R = rw-r--r-- -jre/languages/R/library/MASS/R/contr.sdif.R = rw-r--r-- -jre/languages/R/library/MASS/R/misc.R = rw-r--r-- -jre/languages/R/library/MASS/R/cov.trob.R = rw-r--r-- -jre/languages/R/library/MASS/R/polr.R = rw-r--r-- -jre/languages/R/library/MASS/R/hist.scott.R = rw-r--r-- -jre/languages/R/library/MASS/R/lda.R = rw-r--r-- -jre/languages/R/library/MASS/R/stepAIC.R = rw-r--r-- -jre/languages/R/library/MASS/R/area.R = rw-r--r-- -jre/languages/R/library/MASS/R/rms.curv.R = rw-r--r-- -jre/languages/R/library/MASS/R/fractions.R = rw-r--r-- -jre/languages/R/library/MASS/R/eqscplot.R = rw-r--r-- -jre/languages/R/library/MASS/R/kde2d.R = rw-r--r-- -jre/languages/R/library/MASS/R/lm.ridge.R = rw-r--r-- -jre/languages/R/library/MASS/R/confint.R = rw-r--r-- -jre/languages/R/library/MASS/R/ucv.R = rw-r--r-- -jre/languages/R/library/MASS/R/loglm.R = rw-r--r-- -jre/languages/R/library/MASS/R/gamma.shape.R = rw-r--r-- -jre/languages/R/library/MASS/R/negexp.R = rw-r--r-- -jre/languages/R/library/MASS/R/mca.R = rw-r--r-- -jre/languages/R/library/MASS/R/rlm.R = rw-r--r-- -jre/languages/R/library/MASS/R/truehist.R = rw-r--r-- -jre/languages/R/library/MASS/R/negbin.R = rw-r--r-- -jre/languages/R/library/MASS/R/qda.R = rw-r--r-- -jre/languages/R/library/MASS/R/huber.R = rw-r--r-- -jre/languages/R/library/MASS/R/mvrnorm.R = rw-r--r-- -jre/languages/R/library/MASS/R/zzz.R = rw-r--r-- -jre/languages/R/library/MASS/R/boxcox.R = rw-r--r-- -jre/languages/R/library/MASS/R/lm.gls.R = rw-r--r-- -jre/languages/R/library/MASS/R/parcoord.R = rw-r--r-- -jre/languages/R/library/MASS/R/glmmPQL.R = rw-r--r-- -jre/languages/R/library/MASS/R/isoMDS.R = rw-r--r-- -jre/languages/R/library/MASS/R/hubers.R = rw-r--r-- -jre/languages/R/library/MASS/R/lqs.R = rw-r--r-- -jre/languages/R/library/MASS/Meta/data.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/links.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/features.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/package.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/MASS/html/R.css = rw-r--r-- -jre/languages/R/library/MASS/html/00Index.html = rw-r--r-- -jre/languages/R/library/MASS/libs/MASS.so = rwxr-xr-x -jre/languages/R/library/MASS/po/pl/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/en@quot/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/de/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/ko/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/fr/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch13.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch07.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch09.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch03.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch10.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch14.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch04.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch11.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch15.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch05.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch01.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch12.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch16.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch06.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch02.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch08.R = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/MASS/help/MASS.rdx = rw-r--r-- -jre/languages/R/library/MASS/help/MASS.rdb = rw-r--r-- -jre/languages/R/library/MASS/help/AnIndex = rw-r--r-- -jre/languages/R/library/MASS/help/aliases.rds = rw-r--r-- -jre/languages/R/library/MASS/help/paths.rds = rw-r--r-- -jre/languages/R/library/cluster/CITATION = rw-r--r-- -jre/languages/R/library/cluster/NEWS.Rd = rw-r--r-- -jre/languages/R/library/cluster/NAMESPACE = rw-r--r-- -jre/languages/R/library/cluster/DESCRIPTION = rw-r--r-- -jre/languages/R/library/cluster/INDEX = rw-r--r-- -jre/languages/R/library/cluster/test-tools.R = rw-r--r-- -jre/languages/R/library/cluster/R/internal.R = rw-r--r-- -jre/languages/R/library/cluster/R/clusGapGen.R = rw-r--r-- -jre/languages/R/library/cluster/R/0aaa.R = rw-r--r-- -jre/languages/R/library/cluster/R/cluster.rdb = rw-r--r-- -jre/languages/R/library/cluster/R/cluster.rdx = rw-r--r-- -jre/languages/R/library/cluster/R/cluster = rw-r--r-- -jre/languages/R/library/cluster/R/coef.R = rw-r--r-- -jre/languages/R/library/cluster/R/clara.q = rw-r--r-- -jre/languages/R/library/cluster/R/silhouette.R = rw-r--r-- -jre/languages/R/library/cluster/R/mona.q = rw-r--r-- -jre/languages/R/library/cluster/R/pam.q = rw-r--r-- -jre/languages/R/library/cluster/R/plothier.q = rw-r--r-- -jre/languages/R/library/cluster/R/fanny.q = rw-r--r-- -jre/languages/R/library/cluster/R/plotpart.q = rw-r--r-- -jre/languages/R/library/cluster/R/daisy.q = rw-r--r-- -jre/languages/R/library/cluster/R/clusGap.R = rw-r--r-- -jre/languages/R/library/cluster/R/zzz.R = rw-r--r-- -jre/languages/R/library/cluster/R/ellipsoidhull.R = rw-r--r-- -jre/languages/R/library/cluster/R/diana.q = rw-r--r-- -jre/languages/R/library/cluster/R/agnes.q = rw-r--r-- -jre/languages/R/library/cluster/Meta/data.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/links.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/features.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/package.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/cluster/html/R.css = rw-r--r-- -jre/languages/R/library/cluster/html/00Index.html = rw-r--r-- -jre/languages/R/library/cluster/libs/cluster.so = rwxr-xr-x -jre/languages/R/library/cluster/po/pl/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/en@quot/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/en@quot/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/de/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/de/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/ko/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/ko/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/fr/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/cluster/help/cluster.rdb = rw-r--r-- -jre/languages/R/library/cluster/help/cluster.rdx = rw-r--r-- -jre/languages/R/library/cluster/help/AnIndex = rw-r--r-- -jre/languages/R/library/cluster/help/aliases.rds = rw-r--r-- -jre/languages/R/library/cluster/help/paths.rds = rw-r--r-- -jre/languages/R/library/parallel/NAMESPACE = rw-r--r-- -jre/languages/R/library/parallel/DESCRIPTION = rw-r--r-- -jre/languages/R/library/parallel/INDEX = rw-r--r-- -jre/languages/R/library/parallel/R/parallel = rw-r--r-- -jre/languages/R/library/parallel/R/parallel.rdx = rw-r--r-- -jre/languages/R/library/parallel/R/parallel.rdb = rw-r--r-- -jre/languages/R/library/parallel/Meta/links.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/features.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/package.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/parallel/html/R.css = rw-r--r-- -jre/languages/R/library/parallel/html/00Index.html = rw-r--r-- -jre/languages/R/library/parallel/libs/parallel.so = rwxr-xr-x -jre/languages/R/library/parallel/doc/parallel.pdf = rw-r--r-- -jre/languages/R/library/parallel/help/AnIndex = rw-r--r-- -jre/languages/R/library/parallel/help/aliases.rds = rw-r--r-- -jre/languages/R/library/parallel/help/paths.rds = rw-r--r-- -jre/languages/R/library/parallel/help/parallel.rdx = rw-r--r-- -jre/languages/R/library/parallel/help/parallel.rdb = rw-r--r-- -jre/languages/R/library/tools/NAMESPACE = rw-r--r-- -jre/languages/R/library/tools/DESCRIPTION = rw-r--r-- -jre/languages/R/library/tools/INDEX = rw-r--r-- -jre/languages/R/library/tools/R/tools = rw-r--r-- -jre/languages/R/library/tools/R/tools.rdb = rw-r--r-- -jre/languages/R/library/tools/R/tools.rdx = rw-r--r-- -jre/languages/R/library/tools/R/sysdata.rdb = rw-r--r-- -jre/languages/R/library/tools/R/sysdata.rdx = rw-r--r-- -jre/languages/R/library/tools/Meta/links.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/features.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/package.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/tools/html/R.css = rw-r--r-- -jre/languages/R/library/tools/html/00Index.html = rw-r--r-- -jre/languages/R/library/tools/libs/tools.so = rwxr-xr-x -jre/languages/R/library/tools/help/AnIndex = rw-r--r-- -jre/languages/R/library/tools/help/aliases.rds = rw-r--r-- -jre/languages/R/library/tools/help/tools.rdb = rw-r--r-- -jre/languages/R/library/tools/help/tools.rdx = rw-r--r-- -jre/languages/R/library/tools/help/paths.rds = rw-r--r-- -jre/languages/R/library/methods/NAMESPACE = rw-r--r-- -jre/languages/R/library/methods/DESCRIPTION = rw-r--r-- -jre/languages/R/library/methods/INDEX = rw-r--r-- -jre/languages/R/library/methods/R/methods = rw-r--r-- -jre/languages/R/library/methods/R/methods.rdx = rw-r--r-- -jre/languages/R/library/methods/R/methods.rdb = rw-r--r-- -jre/languages/R/library/methods/Meta/links.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/features.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/package.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/methods/html/R.css = rw-r--r-- -jre/languages/R/library/methods/html/00Index.html = rw-r--r-- -jre/languages/R/library/methods/libs/methods.so = rwxr-xr-x -jre/languages/R/library/methods/help/AnIndex = rw-r--r-- -jre/languages/R/library/methods/help/aliases.rds = rw-r--r-- -jre/languages/R/library/methods/help/paths.rds = rw-r--r-- -jre/languages/R/library/methods/help/methods.rdx = rw-r--r-- -jre/languages/R/library/methods/help/methods.rdb = rw-r--r-- -jre/languages/R/library/boot/CITATION = rw-r--r-- -jre/languages/R/library/boot/NAMESPACE = rw-r--r-- -jre/languages/R/library/boot/bd.q = rw-r--r-- -jre/languages/R/library/boot/DESCRIPTION = rw-r--r-- -jre/languages/R/library/boot/INDEX = rw-r--r-- -jre/languages/R/library/boot/R/bootfuns.q = rw-r--r-- -jre/languages/R/library/boot/R/boot = rw-r--r-- -jre/languages/R/library/boot/R/bootpracs.q = rw-r--r-- -jre/languages/R/library/boot/R/boot.rdb = rw-r--r-- -jre/languages/R/library/boot/R/boot.rdx = rw-r--r-- -jre/languages/R/library/boot/Meta/data.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/links.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/features.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/package.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/boot/html/R.css = rw-r--r-- -jre/languages/R/library/boot/html/00Index.html = rw-r--r-- -jre/languages/R/library/boot/po/pl/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/ru/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/en@quot/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/de/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/ko/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/fr/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/boot/help/AnIndex = rw-r--r-- -jre/languages/R/library/boot/help/aliases.rds = rw-r--r-- -jre/languages/R/library/boot/help/paths.rds = rw-r--r-- -jre/languages/R/library/boot/help/boot.rdb = rw-r--r-- -jre/languages/R/library/boot/help/boot.rdx = rw-r--r-- -jre/languages/R/library/datasets/NAMESPACE = rw-r--r-- -jre/languages/R/library/datasets/DESCRIPTION = rw-r--r-- -jre/languages/R/library/datasets/INDEX = rw-r--r-- -jre/languages/R/library/datasets/Meta/data.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/links.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/features.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/package.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/datasets/html/R.css = rw-r--r-- -jre/languages/R/library/datasets/html/00Index.html = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/datasets/data/morley.tab = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/datasets/help/AnIndex = rw-r--r-- -jre/languages/R/library/datasets/help/aliases.rds = rw-r--r-- -jre/languages/R/library/datasets/help/paths.rds = rw-r--r-- -jre/languages/R/library/datasets/help/datasets.rdx = rw-r--r-- -jre/languages/R/library/datasets/help/datasets.rdb = rw-r--r-- -jre/languages/R/library/nnet/CITATION = rw-r--r-- -jre/languages/R/library/nnet/NAMESPACE = rw-r--r-- -jre/languages/R/library/nnet/DESCRIPTION = rw-r--r-- -jre/languages/R/library/nnet/NEWS = rw-r--r-- -jre/languages/R/library/nnet/INDEX = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.R = rw-r--r-- -jre/languages/R/library/nnet/R/nnet = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.rdx = rw-r--r-- -jre/languages/R/library/nnet/R/zzz.R = rw-r--r-- -jre/languages/R/library/nnet/R/multinom.R = rw-r--r-- -jre/languages/R/library/nnet/R/vcovmultinom.R = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.rdb = rw-r--r-- -jre/languages/R/library/nnet/Meta/links.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/features.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/package.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/nnet/html/R.css = rw-r--r-- -jre/languages/R/library/nnet/html/00Index.html = rw-r--r-- -jre/languages/R/library/nnet/libs/nnet.so = rwxr-xr-x -jre/languages/R/library/nnet/po/pl/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/en@quot/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/de/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/ko/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/fr/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/help/AnIndex = rw-r--r-- -jre/languages/R/library/nnet/help/aliases.rds = rw-r--r-- -jre/languages/R/library/nnet/help/paths.rds = rw-r--r-- -jre/languages/R/library/nnet/help/nnet.rdx = rw-r--r-- -jre/languages/R/library/nnet/help/nnet.rdb = rw-r--r-- -jre/languages/R/library/utils/iconvlist = rw-r--r-- -jre/languages/R/library/utils/NAMESPACE = rw-r--r-- -jre/languages/R/library/utils/DESCRIPTION = rw-r--r-- -jre/languages/R/library/utils/INDEX = rw-r--r-- -jre/languages/R/library/utils/misc/exDIF.dif = rw-r--r-- -jre/languages/R/library/utils/misc/exDIF.csv = rw-r--r-- -jre/languages/R/library/utils/R/utils = rw-r--r-- -jre/languages/R/library/utils/R/sysdata.rdb = rw-r--r-- -jre/languages/R/library/utils/R/sysdata.rdx = rw-r--r-- -jre/languages/R/library/utils/R/utils.rdx = rw-r--r-- -jre/languages/R/library/utils/R/utils.rdb = rw-r--r-- -jre/languages/R/library/utils/Meta/links.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/features.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/package.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/utils/html/R.css = rw-r--r-- -jre/languages/R/library/utils/html/00Index.html = rw-r--r-- -jre/languages/R/library/utils/libs/utils.so = rwxr-xr-x -jre/languages/R/library/utils/Sweave/Sweave-test-1.Rnw = rw-r--r-- -jre/languages/R/library/utils/Sweave/example-1.Rnw = rw-r--r-- -jre/languages/R/library/utils/doc/Sweave.pdf = rw-r--r-- -jre/languages/R/library/utils/help/AnIndex = rw-r--r-- -jre/languages/R/library/utils/help/aliases.rds = rw-r--r-- -jre/languages/R/library/utils/help/paths.rds = rw-r--r-- -jre/languages/R/library/utils/help/utils.rdx = rw-r--r-- -jre/languages/R/library/utils/help/utils.rdb = rw-r--r-- -jre/languages/R/library/stats4/NAMESPACE = rw-r--r-- -jre/languages/R/library/stats4/DESCRIPTION = rw-r--r-- -jre/languages/R/library/stats4/INDEX = rw-r--r-- -jre/languages/R/library/stats4/R/stats4 = rw-r--r-- -jre/languages/R/library/stats4/R/stats4.rdx = rw-r--r-- -jre/languages/R/library/stats4/R/stats4.rdb = rw-r--r-- -jre/languages/R/library/stats4/Meta/links.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/features.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/package.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/stats4/html/R.css = rw-r--r-- -jre/languages/R/library/stats4/html/00Index.html = rw-r--r-- -jre/languages/R/library/stats4/help/AnIndex = rw-r--r-- -jre/languages/R/library/stats4/help/aliases.rds = rw-r--r-- -jre/languages/R/library/stats4/help/paths.rds = rw-r--r-- -jre/languages/R/library/stats4/help/stats4.rdx = rw-r--r-- -jre/languages/R/library/stats4/help/stats4.rdb = rw-r--r-- -jre/languages/R/library/rpart/NEWS.Rd = rw-r--r-- -jre/languages/R/library/rpart/NAMESPACE = rw-r--r-- -jre/languages/R/library/rpart/DESCRIPTION = rw-r--r-- -jre/languages/R/library/rpart/INDEX = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.exp.R = rw-r--r-- -jre/languages/R/library/rpart/R/predict.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.class.R = rw-r--r-- -jre/languages/R/library/rpart/R/post.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpartco.R = rw-r--r-- -jre/languages/R/library/rpart/R/plotcp.R = rw-r--r-- -jre/languages/R/library/rpart/R/path.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/prune.R = rw-r--r-- -jre/languages/R/library/rpart/R/labels.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/pred.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/xpred.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/na.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/snip.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.anova.R = rw-r--r-- -jre/languages/R/library/rpart/R/text.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.control.R = rw-r--r-- -jre/languages/R/library/rpart/R/printcp.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.poisson.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart = rw-r--r-- -jre/languages/R/library/rpart/R/rsq.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/formatg.R = rw-r--r-- -jre/languages/R/library/rpart/R/prune.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.branch.R = rw-r--r-- -jre/languages/R/library/rpart/R/roc.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/snip.rpart.mouse.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.rdx = rw-r--r-- -jre/languages/R/library/rpart/R/meanvar.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.rdb = rw-r--r-- -jre/languages/R/library/rpart/R/post.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/zzz.R = rw-r--r-- -jre/languages/R/library/rpart/R/summary.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpartcallback.R = rw-r--r-- -jre/languages/R/library/rpart/R/importance.R = rw-r--r-- -jre/languages/R/library/rpart/R/residuals.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.matrix.R = rw-r--r-- -jre/languages/R/library/rpart/R/model.frame.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/print.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/plot.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/data.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/links.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/features.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/package.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/rpart/html/R.css = rw-r--r-- -jre/languages/R/library/rpart/html/00Index.html = rw-r--r-- -jre/languages/R/library/rpart/libs/rpart.so = rwxr-xr-x -jre/languages/R/library/rpart/po/pl/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/pl/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ru/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ru/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/en@quot/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/en@quot/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/de/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/de/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ko/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ko/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/fr/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/fr/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/doc/index.html = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.R = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.Rnw = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.pdf = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.Rnw = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.pdf = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.R = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/rpart/help/AnIndex = rw-r--r-- -jre/languages/R/library/rpart/help/aliases.rds = rw-r--r-- -jre/languages/R/library/rpart/help/paths.rds = rw-r--r-- -jre/languages/R/library/rpart/help/rpart.rdx = rw-r--r-- -jre/languages/R/library/rpart/help/rpart.rdb = rw-r--r-- -jre/languages/R/library/lattice/CITATION = rw-r--r-- -jre/languages/R/library/lattice/NAMESPACE = rw-r--r-- -jre/languages/R/library/lattice/DESCRIPTION = rw-r--r-- -jre/languages/R/library/lattice/NEWS = rw-r--r-- -jre/languages/R/library/lattice/INDEX = rw-r--r-- -jre/languages/R/library/lattice/demo/intervals.R = rw-r--r-- -jre/languages/R/library/lattice/demo/panel.R = rw-r--r-- -jre/languages/R/library/lattice/demo/lattice.R = rw-r--r-- -jre/languages/R/library/lattice/demo/labels.R = rw-r--r-- -jre/languages/R/library/lattice/R/qq.R = rw-r--r-- -jre/languages/R/library/lattice/R/axis.R = rw-r--r-- -jre/languages/R/library/lattice/R/shingle.R = rw-r--r-- -jre/languages/R/library/lattice/R/settings.R = rw-r--r-- -jre/languages/R/library/lattice/R/summary.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/qqmath.R = rw-r--r-- -jre/languages/R/library/lattice/R/legend.R = rw-r--r-- -jre/languages/R/library/lattice/R/densityplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/panel.smoothscatter.R = rw-r--r-- -jre/languages/R/library/lattice/R/rfs.R = rw-r--r-- -jre/languages/R/library/lattice/R/interaction.R = rw-r--r-- -jre/languages/R/library/lattice/R/xyplot.ts.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice.rdb = rw-r--r-- -jre/languages/R/library/lattice/R/update.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/bwplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/cloud.R = rw-r--r-- -jre/languages/R/library/lattice/R/panel.superpose.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice.rdx = rw-r--r-- -jre/languages/R/library/lattice/R/panel.smooth.R = rw-r--r-- -jre/languages/R/library/lattice/R/levelplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice = rw-r--r-- -jre/languages/R/library/lattice/R/common.R = rw-r--r-- -jre/languages/R/library/lattice/R/panels.R = rw-r--r-- -jre/languages/R/library/lattice/R/layout.R = rw-r--r-- -jre/languages/R/library/lattice/R/miscellaneous.R = rw-r--r-- -jre/languages/R/library/lattice/R/make.groups.R = rw-r--r-- -jre/languages/R/library/lattice/R/histogram.R = rw-r--r-- -jre/languages/R/library/lattice/R/strip.R = rw-r--r-- -jre/languages/R/library/lattice/R/xyplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/scales.R = rw-r--r-- -jre/languages/R/library/lattice/R/zzz.R = rw-r--r-- -jre/languages/R/library/lattice/R/splom.R = rw-r--r-- -jre/languages/R/library/lattice/R/print.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/tmd.R = rw-r--r-- -jre/languages/R/library/lattice/R/parallel.R = rw-r--r-- -jre/languages/R/library/lattice/Meta/data.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/links.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/features.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/package.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/lattice/html/R.css = rw-r--r-- -jre/languages/R/library/lattice/html/00Index.html = rw-r--r-- -jre/languages/R/library/lattice/libs/lattice.so = rwxr-xr-x -jre/languages/R/library/lattice/po/pl/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/en@quot/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/de/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/ko/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/fr/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/lattice/help/AnIndex = rw-r--r-- -jre/languages/R/library/lattice/help/aliases.rds = rw-r--r-- -jre/languages/R/library/lattice/help/lattice.rdb = rw-r--r-- -jre/languages/R/library/lattice/help/lattice.rdx = rw-r--r-- -jre/languages/R/library/lattice/help/paths.rds = rw-r--r-- -jre/languages/R/library/nlme/CITATION = rw-r--r-- -jre/languages/R/library/nlme/NAMESPACE = rw-r--r-- -jre/languages/R/library/nlme/DESCRIPTION = rw-r--r-- -jre/languages/R/library/nlme/INDEX = rw-r--r-- -jre/languages/R/library/nlme/LICENCE = rw-r--r-- -jre/languages/R/library/nlme/mlbook/ch04.R = rw-r--r-- -jre/languages/R/library/nlme/mlbook/README = rw-r--r-- -jre/languages/R/library/nlme/mlbook/ch05.R = rw-r--r-- -jre/languages/R/library/nlme/R/gls.R = rw-r--r-- -jre/languages/R/library/nlme/R/simulate.R = rw-r--r-- -jre/languages/R/library/nlme/R/pdMat.R = rw-r--r-- -jre/languages/R/library/nlme/R/corStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/newFunc.R = rw-r--r-- -jre/languages/R/library/nlme/R/gnls.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.rdb = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.rdx = rw-r--r-- -jre/languages/R/library/nlme/R/VarCov.R = rw-r--r-- -jre/languages/R/library/nlme/R/lmList.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme = rw-r--r-- -jre/languages/R/library/nlme/R/reStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/newMethods.R = rw-r--r-- -jre/languages/R/library/nlme/R/zzMethods.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlsList.R = rw-r--r-- -jre/languages/R/library/nlme/R/VarCorr.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.R = rw-r--r-- -jre/languages/R/library/nlme/R/newGenerics.R = rw-r--r-- -jre/languages/R/library/nlme/R/lme.R = rw-r--r-- -jre/languages/R/library/nlme/R/varFunc.R = rw-r--r-- -jre/languages/R/library/nlme/R/modelStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/groupedData.R = rw-r--r-- -jre/languages/R/library/nlme/Meta/data.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/links.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/features.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/package.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/nlme/html/R.css = rw-r--r-- -jre/languages/R/library/nlme/html/00Index.html = rw-r--r-- -jre/languages/R/library/nlme/libs/nlme.so = rwxr-xr-x -jre/languages/R/library/nlme/po/pl/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/pl/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/en@quot/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/en@quot/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/de/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/de/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/ko/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/ko/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/fr/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/fr/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch03.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch04.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/runme.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/sims.rda = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch05.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch01.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch06.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch02.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch08.R = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/nlme/help/AnIndex = rw-r--r-- -jre/languages/R/library/nlme/help/aliases.rds = rw-r--r-- -jre/languages/R/library/nlme/help/nlme.rdb = rw-r--r-- -jre/languages/R/library/nlme/help/nlme.rdx = rw-r--r-- -jre/languages/R/library/nlme/help/paths.rds = rw-r--r-- -jre/languages/R/library/splines/NAMESPACE = rw-r--r-- -jre/languages/R/library/splines/DESCRIPTION = rw-r--r-- -jre/languages/R/library/splines/INDEX = rw-r--r-- -jre/languages/R/library/splines/R/splines = rw-r--r-- -jre/languages/R/library/splines/R/splines.rdb = rw-r--r-- -jre/languages/R/library/splines/R/splines.rdx = rw-r--r-- -jre/languages/R/library/splines/Meta/links.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/features.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/package.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/splines/html/R.css = rw-r--r-- -jre/languages/R/library/splines/html/00Index.html = rw-r--r-- -jre/languages/R/library/splines/libs/splines.so = rwxr-xr-x -jre/languages/R/library/splines/help/AnIndex = rw-r--r-- -jre/languages/R/library/splines/help/aliases.rds = rw-r--r-- -jre/languages/R/library/splines/help/paths.rds = rw-r--r-- -jre/languages/R/library/splines/help/splines.rdb = rw-r--r-- -jre/languages/R/library/splines/help/splines.rdx = rw-r--r-- -jre/languages/R/library/grDevices/NAMESPACE = rw-r--r-- -jre/languages/R/library/grDevices/DESCRIPTION = rw-r--r-- -jre/languages/R/library/grDevices/INDEX = rw-r--r-- -jre/languages/R/library/grDevices/demo/hclColors.R = rw-r--r-- -jre/languages/R/library/grDevices/demo/colors.R = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices.rdb = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices.rdx = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices = rw-r--r-- -jre/languages/R/library/grDevices/Meta/links.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/features.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/package.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/grDevices/html/R.css = rw-r--r-- -jre/languages/R/library/grDevices/html/00Index.html = rw-r--r-- -jre/languages/R/library/grDevices/icc/srgb = rw-r--r-- -jre/languages/R/library/grDevices/icc/srgb.flate = rw-r--r-- -jre/languages/R/library/grDevices/afm/cob_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvbo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvnbo___.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019064l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agd_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncb_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-Oblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/s050000l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkdi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/poi_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvno____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agw_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019043l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Roman.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvnb____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/sy______.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059013l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvo_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tii_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-Oblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncr_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010015l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Italic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/MustRead.html = rw-r--r-- -jre/languages/R/library/grDevices/afm/Symbol.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010033l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/com_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018015l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncbi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkd_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-BoldItalic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018032l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_regular_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059036l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/README = rw-r--r-- -jre/languages/R/library/grDevices/afm/cmti10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059033l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-Italic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agwo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvn_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-BoldOblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019063l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tibi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/coo_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/por_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agdo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_symbol_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ZapfDingbats.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/cobo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvb_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-BoldItalic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkli____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019044l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/pobi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tir_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018012l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkl_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/nci_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_boldx_italic_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hv______.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_italic_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059016l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/pob_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-BoldOblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010013l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/cmbxti10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tib_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018035l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_boldx_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010035l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/libs/grDevices.so = rwxr-xr-x -jre/languages/R/library/grDevices/enc/AdobeSym.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin7.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin2.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin1.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/Greek.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1257.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1250.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/TeXtext.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/PDFDoc.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1251.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1253.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/KOI8-U.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/Cyrillic.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/MacRoman.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/AdobeStd.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/KOI8-R.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin9.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/WinAnsi.enc = rw-r--r-- -jre/languages/R/library/grDevices/help/AnIndex = rw-r--r-- -jre/languages/R/library/grDevices/help/grDevices.rdb = rw-r--r-- -jre/languages/R/library/grDevices/help/grDevices.rdx = rw-r--r-- -jre/languages/R/library/grDevices/help/aliases.rds = rw-r--r-- -jre/languages/R/library/grDevices/help/paths.rds = rw-r--r-- -jre/languages/R/library/class/CITATION = rw-r--r-- -jre/languages/R/library/class/NAMESPACE = rw-r--r-- -jre/languages/R/library/class/DESCRIPTION = rw-r--r-- -jre/languages/R/library/class/NEWS = rw-r--r-- -jre/languages/R/library/class/INDEX = rw-r--r-- -jre/languages/R/library/class/R/class.rdb = rw-r--r-- -jre/languages/R/library/class/R/class.rdx = rw-r--r-- -jre/languages/R/library/class/R/multiedit.R = rw-r--r-- -jre/languages/R/library/class/R/SOM.R = rw-r--r-- -jre/languages/R/library/class/R/lvq.R = rw-r--r-- -jre/languages/R/library/class/R/class = rw-r--r-- -jre/languages/R/library/class/R/zzz.R = rw-r--r-- -jre/languages/R/library/class/R/knn.R = rw-r--r-- -jre/languages/R/library/class/Meta/links.rds = rw-r--r-- -jre/languages/R/library/class/Meta/features.rds = rw-r--r-- -jre/languages/R/library/class/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/class/Meta/package.rds = rw-r--r-- -jre/languages/R/library/class/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/class/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/class/html/R.css = rw-r--r-- -jre/languages/R/library/class/html/00Index.html = rw-r--r-- -jre/languages/R/library/class/libs/class.so = rwxr-xr-x -jre/languages/R/library/class/po/pl/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/en@quot/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/de/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/ko/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/fr/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/help/class.rdb = rw-r--r-- -jre/languages/R/library/class/help/class.rdx = rw-r--r-- -jre/languages/R/library/class/help/AnIndex = rw-r--r-- -jre/languages/R/library/class/help/aliases.rds = rw-r--r-- -jre/languages/R/library/class/help/paths.rds = rw-r--r-- -jre/languages/R/library/codetools/NAMESPACE = rw-r--r-- -jre/languages/R/library/codetools/DESCRIPTION = rw-r--r-- -jre/languages/R/library/codetools/INDEX = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.rdx = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.R = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.rdb = rw-r--r-- -jre/languages/R/library/codetools/R/codetools = rw-r--r-- -jre/languages/R/library/codetools/Meta/links.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/features.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/package.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/codetools/html/R.css = rw-r--r-- -jre/languages/R/library/codetools/html/00Index.html = rw-r--r-- -jre/languages/R/library/codetools/help/AnIndex = rw-r--r-- -jre/languages/R/library/codetools/help/codetools.rdx = rw-r--r-- -jre/languages/R/library/codetools/help/codetools.rdb = rw-r--r-- -jre/languages/R/library/codetools/help/aliases.rds = rw-r--r-- -jre/languages/R/library/codetools/help/paths.rds = rw-r--r-- -jre/languages/R/library/spatial/CITATION = rw-r--r-- -jre/languages/R/library/spatial/PP.files = rw-r--r-- -jre/languages/R/library/spatial/NAMESPACE = rw-r--r-- -jre/languages/R/library/spatial/DESCRIPTION = rw-r--r-- -jre/languages/R/library/spatial/NEWS = rw-r--r-- -jre/languages/R/library/spatial/INDEX = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig1c.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/davis.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig1b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/cells.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pines.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/caveolae.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pereg.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/hccells.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/agter.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/eagles.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/tokyo.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/grocery.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/drumlin.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pairfn.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/nztrees.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig2a.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/redwood.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig2b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/towns.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/stowns1.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3c.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/schools.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3a.dat = rw-r--r-- -jre/languages/R/library/spatial/R/kr.R = rw-r--r-- -jre/languages/R/library/spatial/R/zzz.R = rw-r--r-- -jre/languages/R/library/spatial/R/spatial = rw-r--r-- -jre/languages/R/library/spatial/R/spatial.rdb = rw-r--r-- -jre/languages/R/library/spatial/R/spatial.rdx = rw-r--r-- -jre/languages/R/library/spatial/R/pp.R = rw-r--r-- -jre/languages/R/library/spatial/Meta/links.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/features.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/package.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/spatial/html/R.css = rw-r--r-- -jre/languages/R/library/spatial/html/00Index.html = rw-r--r-- -jre/languages/R/library/spatial/libs/spatial.so = rwxr-xr-x -jre/languages/R/library/spatial/po/pl/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/en@quot/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/de/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/ko/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/fr/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/help/AnIndex = rw-r--r-- -jre/languages/R/library/spatial/help/aliases.rds = rw-r--r-- -jre/languages/R/library/spatial/help/paths.rds = rw-r--r-- -jre/languages/R/library/spatial/help/spatial.rdb = rw-r--r-- -jre/languages/R/library/spatial/help/spatial.rdx = rw-r--r-- -jre/languages/R/library/graphics/NAMESPACE = rw-r--r-- -jre/languages/R/library/graphics/DESCRIPTION = rw-r--r-- -jre/languages/R/library/graphics/INDEX = rw-r--r-- -jre/languages/R/library/graphics/demo/Japanese.R = rw-r--r-- -jre/languages/R/library/graphics/demo/plotmath.R = rw-r--r-- -jre/languages/R/library/graphics/demo/persp.R = rw-r--r-- -jre/languages/R/library/graphics/demo/graphics.R = rw-r--r-- -jre/languages/R/library/graphics/demo/image.R = rw-r--r-- -jre/languages/R/library/graphics/demo/Hershey.R = rw-r--r-- -jre/languages/R/library/graphics/R/graphics.rdb = rw-r--r-- -jre/languages/R/library/graphics/R/graphics.rdx = rw-r--r-- -jre/languages/R/library/graphics/R/graphics = rw-r--r-- -jre/languages/R/library/graphics/Meta/links.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/features.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/package.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/graphics/html/R.css = rw-r--r-- -jre/languages/R/library/graphics/html/00Index.html = rw-r--r-- -jre/languages/R/library/graphics/libs/graphics.so = rwxr-xr-x -jre/languages/R/library/graphics/help/AnIndex = rw-r--r-- -jre/languages/R/library/graphics/help/aliases.rds = rw-r--r-- -jre/languages/R/library/graphics/help/graphics.rdb = rw-r--r-- -jre/languages/R/library/graphics/help/graphics.rdx = rw-r--r-- -jre/languages/R/library/graphics/help/paths.rds = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.svg = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.pdf = rw-r--r-- -jre/languages/R/library/graphics/help/figures/oma.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/oma.pdf = rw-r--r-- -jre/languages/R/library/graphics/help/figures/mai.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/mai.pdf = rw-r--r-- -jre/languages/R/library/foreign/COPYRIGHTS = rw-r--r-- -jre/languages/R/library/foreign/NAMESPACE = rw-r--r-- -jre/languages/R/library/foreign/DESCRIPTION = rw-r--r-- -jre/languages/R/library/foreign/INDEX = rw-r--r-- -jre/languages/R/library/foreign/R/read.dta.R = rw-r--r-- -jre/languages/R/library/foreign/R/read.ssd.R = rw-r--r-- -jre/languages/R/library/foreign/R/minitab.R = rw-r--r-- -jre/languages/R/library/foreign/R/dbf.R = rw-r--r-- -jre/languages/R/library/foreign/R/octave.R = rw-r--r-- -jre/languages/R/library/foreign/R/spss.R = rw-r--r-- -jre/languages/R/library/foreign/R/R_systat.R = rw-r--r-- -jre/languages/R/library/foreign/R/xport.R = rw-r--r-- -jre/languages/R/library/foreign/R/zzz.R = rw-r--r-- -jre/languages/R/library/foreign/R/read.epiinfo.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign.rdb = rw-r--r-- -jre/languages/R/library/foreign/R/Sread.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign.rdx = rw-r--r-- -jre/languages/R/library/foreign/R/arff.R = rw-r--r-- -jre/languages/R/library/foreign/R/writeForeignSAS.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign = rw-r--r-- -jre/languages/R/library/foreign/R/writeForeignCode.R = rw-r--r-- -jre/languages/R/library/foreign/Meta/links.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/features.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/package.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/foreign/html/R.css = rw-r--r-- -jre/languages/R/library/foreign/html/00Index.html = rw-r--r-- -jre/languages/R/library/foreign/libs/foreign.so = rwxr-xr-x -jre/languages/R/library/foreign/po/pl/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/pl/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/en@quot/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/en@quot/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/de/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/de/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/fr/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/fr/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/files/electric.sav = rw-r--r-- -jre/languages/R/library/foreign/files/Iris.syd = rw-r--r-- -jre/languages/R/library/foreign/files/testdata.sav = rw-r--r-- -jre/languages/R/library/foreign/files/HillRace.SYD = rw-r--r-- -jre/languages/R/library/foreign/files/sids.dbf = rwxr-xr-x -jre/languages/R/library/foreign/help/AnIndex = rw-r--r-- -jre/languages/R/library/foreign/help/aliases.rds = rw-r--r-- -jre/languages/R/library/foreign/help/paths.rds = rw-r--r-- -jre/languages/R/library/foreign/help/foreign.rdb = rw-r--r-- -jre/languages/R/library/foreign/help/foreign.rdx = rw-r--r-- -jre/languages/R/library/compiler/NAMESPACE = rw-r--r-- -jre/languages/R/library/compiler/DESCRIPTION = rw-r--r-- -jre/languages/R/library/compiler/INDEX = rw-r--r-- -jre/languages/R/library/compiler/R/compiler = rw-r--r-- -jre/languages/R/library/compiler/R/compiler.rdx = rw-r--r-- -jre/languages/R/library/compiler/R/compiler.rdb = rw-r--r-- -jre/languages/R/library/compiler/Meta/links.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/features.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/package.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/compiler/html/R.css = rw-r--r-- -jre/languages/R/library/compiler/html/00Index.html = rw-r--r-- -jre/languages/R/library/compiler/help/AnIndex = rw-r--r-- -jre/languages/R/library/compiler/help/aliases.rds = rw-r--r-- -jre/languages/R/library/compiler/help/paths.rds = rw-r--r-- -jre/languages/R/library/compiler/help/compiler.rdx = rw-r--r-- -jre/languages/R/library/compiler/help/compiler.rdb = rw-r--r-- -jre/languages/R/library/Matrix/Copyrights = rw-r--r-- -jre/languages/R/library/Matrix/NEWS.Rd = rw-r--r-- -jre/languages/R/library/Matrix/test-tools-1.R = rw-r--r-- -jre/languages/R/library/Matrix/NAMESPACE = rw-r--r-- -jre/languages/R/library/Matrix/DESCRIPTION = rw-r--r-- -jre/languages/R/library/Matrix/INDEX = rw-r--r-- -jre/languages/R/library/Matrix/test-tools-Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/Doxyfile = rw-r--r-- -jre/languages/R/library/Matrix/test-tools.R = rw-r--r-- -jre/languages/R/library/Matrix/LICENCE = rw-r--r-- -jre/languages/R/library/Matrix/include/Matrix.h = rw-r--r-- -jre/languages/R/library/Matrix/include/Matrix_stubs.c = rw-r--r-- -jre/languages/R/library/Matrix/include/cholmod.h = rw-r--r-- -jre/languages/R/library/Matrix/R/expm.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Auxiliaries.R = rw-r--r-- -jre/languages/R/library/Matrix/R/corMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ngTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/rankMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ndenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/SparseM-conv.R = rw-r--r-- -jre/languages/R/library/Matrix/R/indMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseQR.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Tsparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ntCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/spModels.R = rw-r--r-- -jre/languages/R/library/Matrix/R/LU.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dppMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/AllClass.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Csparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/pMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ntTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/MatrixFactorization.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ddenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/AllGeneric.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/kronecker.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.rdb = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.rdx = rw-r--r-- -jre/languages/R/library/Matrix/R/not.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ngCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dpoMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/denseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/triangularMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/KhatriRao.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtrMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dspMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/bind2.R = rw-r--r-- -jre/languages/R/library/Matrix/R/abIndex.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsyMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/condest.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Rsparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lgTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/eigen.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Math.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseVector.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgeMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nnzero.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ltCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/zzz.R = rw-r--r-- -jre/languages/R/library/Matrix/R/CHMfactor.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Hilbert.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ltTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Ops.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/diagMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix = rw-r--r-- -jre/languages/R/library/Matrix/R/nearPD.R = rw-r--r-- -jre/languages/R/library/Matrix/R/products.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtpMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/colSums.R = rw-r--r-- -jre/languages/R/library/Matrix/R/HBMM.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Summary.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ldenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/bandSparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lgCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/symmetricMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/data.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/links.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/features.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/package.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/Matrix/html/R.css = rw-r--r-- -jre/languages/R/library/Matrix/html/00Index.html = rw-r--r-- -jre/languages/R/library/Matrix/libs/Matrix.so = rwxr-xr-x -jre/languages/R/library/Matrix/po/pl/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/pl/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/en@quot/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/en@quot/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/de/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/de/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/ko/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/fr/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/fr/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/doc/index.html = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Announce.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/SPQR.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/CHOLMOD.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/SuiteSparse_config.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/UserGuides.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/AMD.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/COLAMD.txt = rw-r--r-- -jre/languages/R/library/Matrix/external/lund_a.rsa = rw-r--r-- -jre/languages/R/library/Matrix/external/CAex_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/test3comp.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/utm300.rua = rw-r--r-- -jre/languages/R/library/Matrix/external/USCounties_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/lund_a.mtx = rw-r--r-- -jre/languages/R/library/Matrix/external/wrong.mtx = rw-r--r-- -jre/languages/R/library/Matrix/external/symA.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/KNex_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/symW.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/pores_1.mtx = rw-r--r-- -jre/languages/R/library/Matrix/data/KNex.R = rw-r--r-- -jre/languages/R/library/Matrix/data/CAex.R = rw-r--r-- -jre/languages/R/library/Matrix/data/USCounties.R = rw-r--r-- -jre/languages/R/library/Matrix/help/AnIndex = rw-r--r-- -jre/languages/R/library/Matrix/help/aliases.rds = rw-r--r-- -jre/languages/R/library/Matrix/help/Matrix.rdb = rw-r--r-- -jre/languages/R/library/Matrix/help/Matrix.rdx = rw-r--r-- -jre/languages/R/library/Matrix/help/paths.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/NAMESPACE = rw-r--r-- -jre/languages/R/library/KernSmooth/DESCRIPTION = rw-r--r-- -jre/languages/R/library/KernSmooth/INDEX = rw-r--r-- -jre/languages/R/library/KernSmooth/R/all.R = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth.rdb = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth.rdx = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/links.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/features.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/package.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/html/R.css = rw-r--r-- -jre/languages/R/library/KernSmooth/html/00Index.html = rw-r--r-- -jre/languages/R/library/KernSmooth/libs/KernSmooth.so = rwxr-xr-x -jre/languages/R/library/KernSmooth/po/pl/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/en@quot/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/de/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/ko/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/fr/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/help/AnIndex = rw-r--r-- -jre/languages/R/library/KernSmooth/help/aliases.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/help/paths.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/help/KernSmooth.rdb = rw-r--r-- -jre/languages/R/library/KernSmooth/help/KernSmooth.rdx = rw-r--r-- -jre/languages/R/library/base/CITATION = rw-r--r-- -jre/languages/R/library/base/DESCRIPTION = rw-r--r-- -jre/languages/R/library/base/INDEX = rw-r--r-- -jre/languages/R/library/base/demo/scoping.R = rw-r--r-- -jre/languages/R/library/base/demo/error.catching.R = rw-r--r-- -jre/languages/R/library/base/demo/is.things.R = rw-r--r-- -jre/languages/R/library/base/demo/recursion.R = rw-r--r-- -jre/languages/R/library/base/R/Rprofile = rw-r--r-- -jre/languages/R/library/base/R/base.rdx = rw-r--r-- -jre/languages/R/library/base/R/base.rdb = rw-r--r-- -jre/languages/R/library/base/R/base = rw-r--r-- -jre/languages/R/library/base/Meta/links.rds = rw-r--r-- -jre/languages/R/library/base/Meta/features.rds = rw-r--r-- -jre/languages/R/library/base/Meta/package.rds = rw-r--r-- -jre/languages/R/library/base/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/base/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/base/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/base/html/R.css = rw-r--r-- -jre/languages/R/library/base/html/00Index.html = rw-r--r-- -jre/languages/R/library/base/libs/base.so = rwxr-xr-x -jre/languages/R/library/base/help/AnIndex = rw-r--r-- -jre/languages/R/library/base/help/aliases.rds = rw-r--r-- -jre/languages/R/library/base/help/paths.rds = rw-r--r-- -jre/languages/R/library/base/help/base.rdx = rw-r--r-- -jre/languages/R/library/base/help/base.rdb = rw-r--r-- -jre/languages/R/library/stats/COPYRIGHTS.modreg = rw-r--r-- -jre/languages/R/library/stats/NAMESPACE = rw-r--r-- -jre/languages/R/library/stats/SOURCES.ts = rw-r--r-- -jre/languages/R/library/stats/DESCRIPTION = rw-r--r-- -jre/languages/R/library/stats/INDEX = rw-r--r-- -jre/languages/R/library/stats/demo/smooth.R = rw-r--r-- -jre/languages/R/library/stats/demo/lm.glm.R = rw-r--r-- -jre/languages/R/library/stats/demo/nlm.R = rw-r--r-- -jre/languages/R/library/stats/demo/glm.vr.R = rw-r--r-- -jre/languages/R/library/stats/R/stats.rdx = rw-r--r-- -jre/languages/R/library/stats/R/stats.rdb = rw-r--r-- -jre/languages/R/library/stats/R/stats = rw-r--r-- -jre/languages/R/library/stats/Meta/links.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/features.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/package.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/stats/html/R.css = rw-r--r-- -jre/languages/R/library/stats/html/00Index.html = rw-r--r-- -jre/languages/R/library/stats/libs/stats.so = rwxr-xr-x -jre/languages/R/library/stats/help/AnIndex = rw-r--r-- -jre/languages/R/library/stats/help/aliases.rds = rw-r--r-- -jre/languages/R/library/stats/help/stats.rdx = rw-r--r-- -jre/languages/R/library/stats/help/paths.rds = rw-r--r-- -jre/languages/R/library/stats/help/stats.rdb = rw-r--r-- -jre/languages/R/library/survival/CITATION = rw-r--r-- -jre/languages/R/library/survival/COPYRIGHTS = rw-r--r-- -jre/languages/R/library/survival/NEWS.Rd = rw-r--r-- -jre/languages/R/library/survival/NAMESPACE = rw-r--r-- -jre/languages/R/library/survival/DESCRIPTION = rw-r--r-- -jre/languages/R/library/survival/INDEX = rw-r--r-- -jre/languages/R/library/survival/R/print.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/plot.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cluster.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gamma.S = rw-r--r-- -jre/languages/R/library/survival/R/aareg.taper.R = rw-r--r-- -jre/languages/R/library/survival/R/survival.rdb = rw-r--r-- -jre/languages/R/library/survival/R/pspline.R = rw-r--r-- -jre/languages/R/library/survival/R/plot.survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/print.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/survival.rdx = rw-r--r-- -jre/languages/R/library/survival/R/coxph.getdata.S = rw-r--r-- -jre/languages/R/library/survival/R/coxph.rvar.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlgam.S = rw-r--r-- -jre/languages/R/library/survival/R/survfit.matrix.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survfit.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.cfit.R = rw-r--r-- -jre/languages/R/library/survival/R/survobrien.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/tmerge.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxph.penal.R = rw-r--r-- -jre/languages/R/library/survival/R/plot.cox.zph.S = rw-r--r-- -jre/languages/R/library/survival/R/basehaz.R = rw-r--r-- -jre/languages/R/library/survival/R/format.Surv.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/normalizetime.R = rw-r--r-- -jre/languages/R/library/survival/R/survfit.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/residuals.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gammacon.S = rw-r--r-- -jre/languages/R/library/survival/R/is.na.coxph.penalty.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cch.R = rw-r--r-- -jre/languages/R/library/survival/R/lines.survfit.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/anova.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/is.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/statefig.R = rw-r--r-- -jre/languages/R/library/survival/R/survreg.control.S = rw-r--r-- -jre/languages/R/library/survival/R/survreg.distributions.S = rw-r--r-- -jre/languages/R/library/survival/R/ridge.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.null.S = rw-r--r-- -jre/languages/R/library/survival/R/pyears.R = rw-r--r-- -jre/languages/R/library/survival/R/summary.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/coxph.detail.S = rw-r--r-- -jre/languages/R/library/survival/R/print.pyears.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.wtest.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/survConcordance.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitTurnbull.S = rw-r--r-- -jre/languages/R/library/survival/R/survpenal.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/survfitCI.R = rw-r--r-- -jre/languages/R/library/survival/R/attrassign.R = rw-r--r-- -jre/languages/R/library/survival/R/ratetableold.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survfitms.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.brent.S = rw-r--r-- -jre/languages/R/library/survival/R/match.ratetable.R = rwxr-xr-x -jre/languages/R/library/survival/R/firstlib.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitcoxph.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/cipoisson.R = rw-r--r-- -jre/languages/R/library/survival/R/predict.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/lines.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlgauss.S = rw-r--r-- -jre/languages/R/library/survival/R/print.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.S = rw-r--r-- -jre/languages/R/library/survival/R/strata.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/predict.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/yates.R = rw-r--r-- -jre/languages/R/library/survival/R/neardate.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survdiff.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/coxpenal.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/agexact.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/model.matrix.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/model.frame.survreg.R = rw-r--r-- -jre/languages/R/library/survival/R/lines.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cox.zph.S = rw-r--r-- -jre/languages/R/library/survival/R/survfitms.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gaussian.S = rw-r--r-- -jre/languages/R/library/survival/R/ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlaic.S = rw-r--r-- -jre/languages/R/library/survival/R/tcut.S = rw-r--r-- -jre/languages/R/library/survival/R/dsurvreg.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/clogit.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survexp.S = rw-r--r-- -jre/languages/R/library/survival/R/Surv.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitKM.S = rw-r--r-- -jre/languages/R/library/survival/R/survreg.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.t.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survfit.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/survdiff.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/aeqSurv.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxphlist.S = rw-r--r-- -jre/languages/R/library/survival/R/finegray.R = rw-r--r-- -jre/languages/R/library/survival/R/summary.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/coxpenal.df.S = rw-r--r-- -jre/languages/R/library/survival/R/ratetableDate.R = rw-r--r-- -jre/languages/R/library/survival/R/predict.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/agreg.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.survreglist.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.null.S = rw-r--r-- -jre/languages/R/library/survival/R/quantile.survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/coxexact.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/untangle.specials.S = rw-r--r-- -jre/languages/R/library/survival/R/predict.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/survConcordance.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/agsurv.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controldf.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.survreg.R = rw-r--r-- -jre/languages/R/library/survival/R/survcallback.S = rw-r--r-- -jre/languages/R/library/survival/R/logLik.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/survSplit.R = rw-r--r-- -jre/languages/R/library/survival/R/labels.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/survival = rw-r--r-- -jre/languages/R/library/survival/R/survregDtest.S = rw-r--r-- -jre/languages/R/library/survival/R/xtras.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.control.S = rw-r--r-- -jre/languages/R/library/survival/R/survdiff.fit.S = rw-r--r-- -jre/languages/R/library/survival/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/data.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/links.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/features.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/package.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/survival/html/R.css = rw-r--r-- -jre/languages/R/library/survival/html/00Index.html = rw-r--r-- -jre/languages/R/library/survival/libs/survival.so = rwxr-xr-x -jre/languages/R/library/survival/doc/adjcurve.R = rw-r--r-- -jre/languages/R/library/survival/doc/adjcurve.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/adjcurve.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/index.html = rw-r--r-- -jre/languages/R/library/survival/doc/tests.R = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/multi.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/multi.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/population.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/population.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.R = rw-r--r-- -jre/languages/R/library/survival/doc/population.R = rw-r--r-- -jre/languages/R/library/survival/doc/tests.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/tests.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/compete.R = rw-r--r-- -jre/languages/R/library/survival/doc/compete.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/compete.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.R = rw-r--r-- -jre/languages/R/library/survival/doc/validate.R = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.R = rw-r--r-- -jre/languages/R/library/survival/doc/validate.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/validate.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/multi.R = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/survival/help/survival.rdb = rw-r--r-- -jre/languages/R/library/survival/help/survival.rdx = rw-r--r-- -jre/languages/R/library/survival/help/AnIndex = rw-r--r-- -jre/languages/R/library/survival/help/aliases.rds = rw-r--r-- -jre/languages/R/library/survival/help/paths.rds = rw-r--r-- -jre/languages/R/library/grid/NAMESPACE = rw-r--r-- -jre/languages/R/library/grid/DESCRIPTION = rw-r--r-- -jre/languages/R/library/grid/INDEX = rw-r--r-- -jre/languages/R/library/grid/R/grid.rdb = rw-r--r-- -jre/languages/R/library/grid/R/grid.rdx = rw-r--r-- -jre/languages/R/library/grid/R/grid = rw-r--r-- -jre/languages/R/library/grid/Meta/links.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/features.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/package.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/grid/html/R.css = rw-r--r-- -jre/languages/R/library/grid/html/00Index.html = rw-r--r-- -jre/languages/R/library/grid/libs/grid.so = rwxr-xr-x -jre/languages/R/library/grid/doc/moveline.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/plotexample.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/saveload.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/displaylist.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/viewports.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/interactive.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/grid.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/DivByZero.txt = rw-r--r-- -jre/languages/R/library/grid/doc/rotated.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/changes.txt = rw-r--r-- -jre/languages/R/library/grid/doc/locndimn.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/frame.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/nonfinite.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/sharing.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/grobs.pdf = rw-r--r-- -jre/languages/R/library/grid/help/AnIndex = rw-r--r-- -jre/languages/R/library/grid/help/aliases.rds = rw-r--r-- -jre/languages/R/library/grid/help/grid.rdb = rw-r--r-- -jre/languages/R/library/grid/help/grid.rdx = rw-r--r-- -jre/languages/R/library/grid/help/paths.rds = rw-r--r-- -jre/languages/R/etc/edMakeconf.etc.llvm = rw-r--r-- -jre/languages/R/etc/native-packages = rw-r--r-- -jre/languages/R/etc/configure.ac = rw-r--r-- -jre/languages/R/etc/Makeconf.in = rw-r--r-- -jre/languages/R/etc/ldpaths = rw-r--r-- -jre/languages/R/etc/DEFAULT_CRAN_MIRROR = rw-r--r-- -jre/languages/R/etc/configure = rwxr-xr-x -jre/languages/R/etc/ffibuildtype = rw-r--r-- -jre/languages/R/etc/repositories = rw-r--r-- -jre/languages/R/etc/Renviron.in = rw-r--r-- -jre/languages/R/etc/ldpaths.in = rw-r--r-- -jre/languages/R/etc/VERSION = rw-r--r-- -jre/languages/R/etc/Makeconf = rw-r--r-- -jre/languages/R/etc/Renviron = rw-r--r-- -jre/languages/R/etc/edMakeconf.etc = rw-r--r-- -jre/languages/R/etc/javaconf = rw-r--r-- -jre/languages/R/etc/tools/GETVERSION = rw-r--r-- -jre/languages/R/etc/tools/ldAIX4 = rw-r--r-- -jre/languages/R/etc/tools/copy-if-change = rw-r--r-- -jre/languages/R/etc/tools/install-sh = rwxr-xr-x -jre/languages/R/etc/tools/help2man.pl = rw-r--r-- -jre/languages/R/etc/tools/config.rpath = rwxr-xr-x -jre/languages/R/etc/tools/ltmain.sh = rw-r--r-- -jre/languages/R/etc/tools/link-recommended = rwxr-xr-x -jre/languages/R/etc/tools/Makefile = rw-r--r-- -jre/languages/R/etc/tools/config.guess = rwxr-xr-x -jre/languages/R/etc/tools/missing = rwxr-xr-x -jre/languages/R/etc/tools/README = rw-r--r-- -jre/languages/R/etc/tools/GETCONFIG = rw-r--r-- -jre/languages/R/etc/tools/config.sub = rwxr-xr-x -jre/languages/R/etc/tools/GETMAKEVAL = rwxr-xr-x -jre/languages/R/etc/tools/updatefat = rwxr-xr-x -jre/languages/R/etc/tools/install-info.pl = rw-r--r-- -jre/languages/R/etc/tools/move-if-change = rw-r--r-- -jre/languages/R/etc/tools/getsp.java = rw-r--r-- -jre/languages/R/etc/tools/Makefile.in = rw-r--r-- -jre/languages/R/etc/tools/rsync-recommended = rwxr-xr-x -jre/languages/R/etc/tools/GETDISTNAME = rwxr-xr-x -jre/languages/R/etc/tools/mdate-sh = rwxr-xr-x -jre/languages/R/etc/m4/ltversion.m4 = rw-r--r-- -jre/languages/R/etc/m4/libtool.m4 = rw-r--r-- -jre/languages/R/etc/m4/ltoptions.m4 = rw-r--r-- -jre/languages/R/etc/m4/cairo.m4 = rw-r--r-- -jre/languages/R/etc/m4/ltsugar.m4 = rw-r--r-- -jre/languages/R/etc/m4/Makefile = rw-r--r-- -jre/languages/R/etc/m4/stat-time.m4 = rw-r--r-- -jre/languages/R/etc/m4/README = rw-r--r-- -jre/languages/R/etc/m4/bigendian.m4 = rw-r--r-- -jre/languages/R/etc/m4/codeset.m4 = rw-r--r-- -jre/languages/R/etc/m4/gettext.m4 = rw-r--r-- -jre/languages/R/etc/m4/R.m4 = rw-r--r-- -jre/languages/R/etc/m4/cxx_11.m4 = rw-r--r-- -jre/languages/R/etc/m4/clibs.m4 = rw-r--r-- -jre/languages/R/etc/m4/gettext-lib.m4 = rw-r--r-- -jre/languages/R/etc/m4/Makefile.in = rw-r--r-- -jre/languages/R/etc/m4/lt~obsolete.m4 = rw-r--r-- -jre/languages/R/etc/m4/openmp.m4 = rw-r--r-- -jre/languages/R/etc/src/include/config.h.in = rw-r--r-- -jre/languages/R/share/encodings/character-sets = rw-r--r-- -jre/languages/R/share/encodings/Adobe-glyphlist = rw-r--r-- -jre/languages/R/share/R/tests-startup.R = rw-r--r-- -jre/languages/R/share/R/examples-header.R = rw-r--r-- -jre/languages/R/share/R/examples-footer.R = rw-r--r-- -jre/languages/R/share/R/REMOVE.R = rw-r--r-- -jre/languages/R/share/R/nspackloader.R = rw-r--r-- -jre/languages/R/share/java/README = rw-r--r-- -jre/languages/R/share/java/getsp.class = rw-r--r-- -jre/languages/R/share/make/shlib.mk = rw-r--r-- -jre/languages/R/share/make/check_vars_ini.mk = rw-r--r-- -jre/languages/R/share/make/lazycomp.mk = rw-r--r-- -jre/languages/R/share/make/winshlib.mk = rw-r--r-- -jre/languages/R/share/make/config.mk = rw-r--r-- -jre/languages/R/share/make/clean.mk = rw-r--r-- -jre/languages/R/share/make/vars.mk = rw-r--r-- -jre/languages/R/share/make/basepkg.mk = rw-r--r-- -jre/languages/R/share/make/check_vars_out.mk = rw-r--r-- -jre/languages/R/share/Rd/macros/system.Rd = rw-r--r-- -jre/languages/R/doc/COPYRIGHTS = rw-r--r-- -jre/languages/R/doc/BioC_mirrors.csv = rw-r--r-- -jre/languages/R/doc/NEWS.Rd = rw-r--r-- -jre/languages/R/doc/NEWS.pdf = rw-r--r-- -jre/languages/R/doc/R.aux = rw-r--r-- -jre/languages/R/doc/AUTHORS = rw-r--r-- -jre/languages/R/doc/Makefile = rw-r--r-- -jre/languages/R/doc/FAQ = rw-r--r-- -jre/languages/R/doc/RESOURCES = rw-r--r-- -jre/languages/R/doc/Rscript.1 = rw-r--r-- -jre/languages/R/doc/CRAN_mirrors.csv = rw-r--r-- -jre/languages/R/doc/NEWS.2 = rw-r--r-- -jre/languages/R/doc/COPYING = rw-r--r-- -jre/languages/R/doc/NEWS.rds = rw-r--r-- -jre/languages/R/doc/NEWS = rw-r--r-- -jre/languages/R/doc/NEWS.2.Rd = rw-r--r-- -jre/languages/R/doc/THANKS = rw-r--r-- -jre/languages/R/doc/KEYWORDS = rw-r--r-- -jre/languages/R/doc/Makefile.in = rw-r--r-- -jre/languages/R/doc/Makefile.win = rw-r--r-- -jre/languages/R/doc/R.1 = rw-r--r-- -jre/languages/R/doc/NEWS.0 = rw-r--r-- -jre/languages/R/doc/KEYWORDS.db = rw-r--r-- -jre/languages/R/doc/NEWS.1 = rw-r--r-- -jre/languages/R/doc/html/favicon.ico = rw-r--r-- -jre/languages/R/doc/html/index.html = rw-r--r-- -jre/languages/R/doc/html/about.html = rw-r--r-- -jre/languages/R/doc/html/up.jpg = rw-r--r-- -jre/languages/R/doc/html/Makefile = rw-r--r-- -jre/languages/R/doc/html/packages.html = rw-r--r-- -jre/languages/R/doc/html/NEWS.2.html = rw-r--r-- -jre/languages/R/doc/html/R-admin.html = rw-r--r-- -jre/languages/R/doc/html/index-default.html = rw-r--r-- -jre/languages/R/doc/html/NEWS.html = rw-r--r-- -jre/languages/R/doc/html/resources.html = rw-r--r-- -jre/languages/R/doc/html/left.jpg = rw-r--r-- -jre/languages/R/doc/html/Notes = rw-r--r-- -jre/languages/R/doc/html/logo.jpg = rw-r--r-- -jre/languages/R/doc/html/R.css = rw-r--r-- -jre/languages/R/doc/html/Rlogo.svg = rw-r--r-- -jre/languages/R/doc/html/Search.html = rw-r--r-- -jre/languages/R/doc/html/Rlogo.pdf = rw-r--r-- -jre/languages/R/doc/html/SearchOn.html = rw-r--r-- -jre/languages/R/doc/html/Makefile.in = rw-r--r-- -jre/languages/R/doc/html/right.jpg = rw-r--r-- -jre/languages/R/doc/html/packages-head-utf8.html = rw-r--r-- -jre/languages/R/doc/manual/R-exts.texi = rw-r--r-- -jre/languages/R/doc/manual/pdfcolor.tex = rw-r--r-- -jre/languages/R/doc/manual/refman.top = rw-r--r-- -jre/languages/R/doc/manual/ISBN = rw-r--r-- -jre/languages/R/doc/manual/resources.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile = rw-r--r-- -jre/languages/R/doc/manual/version.texi = rw-r--r-- -jre/languages/R/doc/manual/R-defs.texi = rw-r--r-- -jre/languages/R/doc/manual/R-exts.c = rw-r--r-- -jre/languages/R/doc/manual/rw-FAQ.texi = rw-r--r-- -jre/languages/R/doc/manual/R-FAQ.texi = rw-r--r-- -jre/languages/R/doc/manual/R-intro.R = rw-r--r-- -jre/languages/R/doc/manual/quot.sed = rw-r--r-- -jre/languages/R/doc/manual/README = rw-r--r-- -jre/languages/R/doc/manual/Rfaq.css = rw-r--r-- -jre/languages/R/doc/manual/refman.bot = rw-r--r-- -jre/languages/R/doc/manual/R-intro.texi = rw-r--r-- -jre/languages/R/doc/manual/stamp-images-html = rw-r--r-- -jre/languages/R/doc/manual/dir = rw-r--r-- -jre/languages/R/doc/manual/R-data.texi = rw-r--r-- -jre/languages/R/doc/manual/epsf.tex = rw-r--r-- -jre/languages/R/doc/manual/Rman.css = rw-r--r-- -jre/languages/R/doc/manual/R-ints.texi = rw-r--r-- -jre/languages/R/doc/manual/R-exts.R = rw-r--r-- -jre/languages/R/doc/manual/R-admin.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile.in = rw-r--r-- -jre/languages/R/doc/manual/R-lang.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile.win = rw-r--r-- -jre/languages/R/doc/manual/images/hist.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/hist.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig12.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig11.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/fig11.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig12.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ecdf.png = rw-r--r-- -jre/languages/R/doc/manual/images/ice.png = rw-r--r-- -jre/languages/R/doc/manual/images/QQ.png = rw-r--r-- -jre/languages/R/doc/manual/images/QQ.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ecdf.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ice.pdf = rw-r--r-- -jre/languages/R/jline.jar = rw-r--r-- -jre/languages/R/antlr4.jar = rw-r--r-- -jre/languages/R/xz-1.8.jar = rw-r--r-- -jre/languages/R/fastr-launcher.jar = rw-r--r-- -jre/languages/R/bin/exec/R = rwxr-xr-x -jre/languages/R/bin/Rscript = rwxr-xr-x -jre/languages/R/3rd_party_licenses_fastr.txt = rw-r--r-- -jre/languages/R/native-image.properties = rw-r--r-- -jre/languages/R/README_FASTR = rw-r--r-- -jre/languages/R/LICENSE_FASTR = rw-r--r-- -LICENSE_FASTR = rwxrwxrwx -3rd_party_licenses_fastr.txt = rwxrwxrwx -bin/Rscript = rwxrwxrwx -bin/R = rwxrwxrwx -jre/languages/R/release = rw-rw-r-- -jre/bin/Rscript = rwxrwxrwx -jre/bin/R = rwxrwxrwx \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/symlinks deleted file mode 100644 index 0aeecbe46387..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/META-INF/symlinks +++ /dev/null @@ -1,3 +0,0 @@ -LICENSE_FASTR = jre/languages/R/LICENSE_FASTR -bin/R = ../jre/bin/R -jre/bin/R = ../languages/R/bin/R \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/LICENSE_FASTR b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/LICENSE_FASTR deleted file mode 100644 index 54975fbea0e8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/LICENSE_FASTR +++ /dev/null @@ -1,720 +0,0 @@ -Product License - GraalVM Community Edition 1.0 R Language Component - -This is a release of GraalVM Community Edition 1.0 R Language Component. This -particular copy of the software is released under version 3 of GNU General -Public License. - -Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved - -=========================================================================== - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - -=========================================================================== - - WRITTEN OFFER FOR SOURCE CODE -For any software that you receive from Oracle in binary form which is licensed -under an open source license that gives you the right to receive the source -code for that binary, you can obtain a copy of the applicable source code by -visiting http://www.oracle.com/goto/opensourcecode. If the source code for the -binary was not provided to you with the binary, you can also receive a copy of -the source code on physical media by submitting a written request to the -address listed below or by sending an email to Oracle using the following link: - http://www.oracle.com/goto/opensourcecode/request. - -Oracle America, Inc. -Attn: Senior Vice President -Development and Engineering Legal -500 Oracle Parkway, 10th Floor -Redwood Shores, CA 94065 - -Your request should include: - • The name of the binary for which you are requesting the source code - • The name and version number of the Oracle product containing the binary - • The date you received the Oracle product - • Your name - • Your company name (if applicable) - • Your return mailing address and email, and - • A telephone number in the event we need to reach you. - -We may charge you a fee to cover the cost of physical media and processing. -Your request must be sent - a. within three (3) years of the date you received the Oracle product that -included the binary that is the subject of your request, or - b. in the case of code licensed under the GPL v3 for as long as Oracle -offers spare parts or customer support for that product model. - -=========================================================================== diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/README_FASTR b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/README_FASTR deleted file mode 100644 index a5283f739238..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/README_FASTR +++ /dev/null @@ -1,70 +0,0 @@ -[![Join the chat at https://gitter.im/graalvm/graal-core](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/graalvm/graal-core?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -A high-performance implementation of the R programming language, built on GraalVM. - -FastR aims to be: -* [efficient](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#4ab6): executing R language scripts faster than any other R runtime -* [polyglot](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#0f5c): allowing [polyglot interoperability](https://www.graalvm.org/docs/reference-manual/polyglot/) with other languages in the GraalVM ecosystem. -* [compatible](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#fff5): providing support for existing packages and the R native interface -* [embeddable](https://github.com/graalvm/examples/tree/master/r_java_embedding): allowing integration using the R embedding API or the GraalVM polyglot embedding SDK - - -The screenshot below shows Java application with embedded FastR engine. -The plot below was generated by `ggplot2` running on FastR and it shows -peak performance of the [raytracing example](http://www.tylermw.com/throwing-shade/). -The measurements were [reproduced independently](https://nextjournal.com/sdanisch/fastr-benchmark). - -![Java embedding](documentation/assets/javaui.png) -![Speedup](documentation/assets/speedup.png) - - ## Getting Started -See the documentation on the GraalVM website on how to [get GraalVM](https://www.graalvm.org/docs/getting-started/) and [install and use FastR](http://www.graalvm.org/docs/reference-manual/languages/r/). - -``` -$ $GRAALVM/bin/R -Type 'q()' to quit R. -> print("Hello R!") -[1] "Hello R!" -> -``` - -## Documentation - -The reference manual for FastR, which explains its advantages, its current limitations, compatibility and additional functionality is available on the [GraalVM website](http://www.graalvm.org/docs/reference-manual/languages/r/). - -Further documentation, including contributor/developer-oriented information, is in the [documentation folder](documentation/Index.md) of this repository. - -## Current Status - -The goal of FastR is to be a drop-in replacement for GNU-R, the reference implementation of the R language. -FastR faithfully implements the R language, and any difference in behavior is considered to be a bug. - -FastR is capable of running binary R packages built for GNU-R as long as those packages properly use the R extensions C API (for best results, it is recommended to install R packages from source). -FastR supports R graphics via the grid package and packages based on grid (like lattice and ggplot2). -We are currently working towards support for the base graphics package. -FastR currently supports many of the popular R packages, such as ggplot2, jsonlite, testthat, assertthat, knitr, Shiny, Rcpp, rJava, quantmod and more… - -Moreover, support for dplyr and data.table are on the way. -We are actively monitoring and improving FastR support for the most popular packages published on CRAN including all the tidyverse packages. -However, one should take into account the experimental state of FastR, there can be packages that are not compatible yet, and if you try it on a complex R application, it can stumble on those. - -## Stay connected with the community - -See [graalvm.org/community](https://www.graalvm.org/community/) on how to stay connected with the development community. -The discussion on [gitter](https://gitter.im/graalvm/graal-core) is a good way to get in touch with us. - -We would like to grow the FastR open-source community to provide a free R implementation atop the Truffle/Graal stack. -We encourage contributions, and invite interested developers to join in. -Prospective contributors need to sign the [Oracle Contributor Agreement (OCA)](http://www.oracle.com/technetwork/community/oca-486395.html). -The access point for contributions, issues and questions about FastR is the [GitHub repository](https://github.com/oracle/fastr). - -## Authors - -FastR is developed by Oracle Labs and is based on [the GNU-R runtime](http://www.r-project.org/). -It contains contributions by researchers at Purdue University ([purdue-fastr](https://github.com/allr/purdue-fastr)), Northeastern University, JKU Linz, TU Dortmund and TU Berlin. - -## License - -FastR is available under a GPLv3 license. - - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/doc/THANKS b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/doc/THANKS deleted file mode 100644 index 6f8eb3ee226a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/doc/THANKS +++ /dev/null @@ -1,70 +0,0 @@ -R would not be what it is today without the invaluable help of these -people outside of the R core team, who contributed by donating code, bug -fixes and documentation: - -Valerio Aimale, Suharto Anggono, Thomas Baier, Henrik Bengtsson, Roger Bivand, -Ben Bolker, David Brahm, G"oran Brostr"om, Patrick Burns, Vince Carey, -Saikat DebRoy, Matt Dowle, Brian D'Urso, Lyndon Drake, Dirk Eddelbuettel, -Claus Ekstrom, Sebastian Fischmeister, John Fox, Paul Gilbert, -Yu Gong, Gabor Grothendieck, Frank E Harrell Jr, Peter M. Haverty, -Torsten Hothorn, Robert King, Kjetil Kjernsmo, Roger Koenker, Philippe Lambert, -Jan de Leeuw, Jim Lindsey, Patrick Lindsey, Catherine Loader, -Gordon Maclean, John Maindonald, David Meyer, Ei-ji Nakama, -Jens Oehlschaegel, Steve Oncley, Richard O'Keefe, Hubert Palme, -Roger D. Peng, Jose' C. Pinheiro, Tony Plate, Anthony Rossini, -Jonathan Rougier, Petr Savicky, Guenther Sawitzki, Marc Schwartz, -Arun Srinivasan, Detlef Steuer, Bill Simpson, Gordon Smyth, Adrian Trapletti, -Terry Therneau, Rolf Turner, Bill Venables, Gregory R. Warnes, -Andreas Weingessel, Morten Welinder, James Wettenhall, Simon Wood, and -Achim Zeileis. - -Others have written code that has been adopted by R and is -acknowledged in the code files, including - -J. D. Beasley, David J. Best, Richard Brent, Kevin Buhr, Michael -A. Covington, Bill Cleveland, Robert Cleveland,, G. W. Cran, -C. G. Ding, Ulrich Drepper, Paul Eggert, J. O. Evans, David M. Gay, -H. Frick, G. W. Hill, Richard H. Jones, Eric Grosse, Shelby Haberman, -Bruno Haible, John Hartigan, Andrew Harvey, Trevor Hastie, Min Long -Lam, George Marsaglia, K. J. Martin, Gordon Matzigkeit, -C. R. Mckenzie, Jean McRae, Cyrus Mehta, Fionn Murtagh, John C. Nash, -Finbarr O'Sullivan, R. E. Odeh, William Patefield, Nitin Patel, Alan -Richardson, D. E. Roberts, Patrick Royston, Russell Lenth, Ming-Jen -Shyu, Richard C. Singleton, S. G. Springer, Supoj Sutanthavibul, Irma -Terpenning, G. E. Thomas, Rob Tibshirani, Wai Wan Tsang, Berwin -Turlach, Gary V. Vaughan, Michael Wichura, Jingbo Wang, M. A. Wong, -and the Free Software Foundation (for autoconf code and utilities). -See also files under src/extras. - -Many more, too numerous to mention here, have contributed by sending bug -reports and suggesting various improvements. - -Simon Davies whilst at the University of Auckland wrote the original -version of glm(). - -Julian Harris and Wing Kwong (Tiki) Wan whilst at the University of -Auckland assisted Ross Ihaka with the original Macintosh port. - -R was inspired by the S environment which has been principally -developed by John Chambers, with substantial input from Douglas Bates, -Rick Becker, Bill Cleveland, Trevor Hastie, Daryl Pregibon and -Allan Wilks. - -A special debt is owed to John Chambers who has graciously contributed -advice and encouragement in the early days of R and later became a -member of the core team. - - - -The R Foundation may decide to give out @R-project.org -email addresses to contributors to the R Project (even without making them -members of the R Foundation) when in the view of the R Foundation this -would help advance the R project. - -The R Core Group, Roger Bivand, Jennifer Bryan, Di Cook, Dirk Eddelbuettel, -John Fox, Bettina Grün, Frank Harrell, Torsten Hothorn, Stefano Iacus, -Julie Josse, Balasubramanian Narasimhan, Marc Schwartz, Heather Turner, -Bill Venables, Hadley Wickham and Achim Zeileis are the ordinary members of -the R Foundation. -In addition, David Meyer and Simon Wood are also e-addressable by -.@R-project.org. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/include/linked b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/include/linked deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/library/utils/DESCRIPTION b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/library/utils/DESCRIPTION deleted file mode 100644 index e8a417ec3fe6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/library/utils/DESCRIPTION +++ /dev/null @@ -1,11 +0,0 @@ -Package: utils -Version: 3.5.1 -Priority: base -Title: The R Utils Package -Author: R Core Team and contributors worldwide -Maintainer: R Core Team -Description: R utility functions. -License: Part of R 3.5.1 -Suggests: methods, xml2, commonmark -NeedsCompilation: yes -Built: R 3.5.1; x86_64-apple-darwin18.2.0; 2019-04-02 04:04:54 UTC; unix diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/native-image.properties deleted file mode 100644 index 0b896fe5ce53..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/native-image.properties +++ /dev/null @@ -1,28 +0,0 @@ -# This file contains native-image arguments needed to fastr -# - -ImageName = RMain - -Requires = tool:nfi \ - tool:chromeinspector \ - tool:nfi \ - tool:profiler - -JavaArgs = \ - -Dfastr.resource.factory.class=com.oracle.truffle.r.nodes.builtin.EagerResourceHandlerFactory \ - -Dfastr.internal.usemxbeans=false \ - -Dfastr.internal.usenativeeventloop=false \ - -Dfastr.internal.defaultdownloadmethod=wget \ - -Dfastr.internal.ignorejvmargs=true \ - -Dfastr.use.remote.grid.awt.device=true - -LauncherClass = com.oracle.truffle.r.launcher.RMain -LauncherClassPath = lib/graalvm/launcher-common.jar:languages/R/fastr-launcher.jar - -Args = --enable-http \ - -H:MaxRuntimeCompileMethods=8000 \ - -H:+UnlockExperimentalVMOptions \ - -H:-TruffleCheckFrameImplementation \ - -H:+TruffleCheckNeverPartOfCompilation \ - -H:-UseServiceLoaderFeature \ - -H:-UnlockExperimentalVMOptions diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/release deleted file mode 100644 index eb822705c23a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=macos -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/share/java/README b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/share/java/README deleted file mode 100644 index 6201c0580eb8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.0.1.0/jre/languages/R/share/java/README +++ /dev/null @@ -1,3 +0,0 @@ -getsp.class has source tools/getsp.java. - -It is installed for use by R CMD javareconf. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/MANIFEST.MF deleted file mode 100644 index d95363e1eca9..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,24 +0,0 @@ -Bundle-Name: FastR -Bundle-Symbolic-Name: org.graalvm.R -Bundle-Version: 1.1.0.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.1.0.0 - )(os_name=macos)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/R -x-GraalVM-Message-PostInst: NOTES:\n---------------\nSome R packages nee - d a system-dependent configuration before they can be installed. A gener - ic configuration that works out of the box in most cases is provided by - default. If you wish to fine-tune the configuration to your system or sh - ould you encounter any issues during R package installation, try running - the following script that adjusts the configuration to your system: \n - ${graalvm_home}/jre/languages/R/bin/configure_fastr\n\nThe R componen - t comes without native image by default. If you wish to build the native - image, which provides faster startup, but slightly slower peak performa - nce, then run the following:\n ${graalvm_home}/jre/languages/R/bin/ins - tall_r_native_image\n\nThe native image is then used by default. Pass '- - -jvm' flag to the R or Rscript launcher to use JVM instead of the native - image. Note that the native image is not stable yet and is intended for - evaluation purposes and experiments. Some features may not work when th - e native image is installed, most notably the --polyglot switch. The nat - ive image can be uninstalled using the installation script with 'uninsta - ll' argument.\n\nSee http://www.graalvm.org/docs/reference-manual/langua - ges/r for more. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/permissions deleted file mode 100644 index 14fe1475669d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/permissions +++ /dev/null @@ -1,1622 +0,0 @@ -jre/languages/R/bin/R = rwxr-xr-x -jre/languages/R/bin/Rdconv = rwxr-xr-x -jre/languages/R/bin/SHLIB = rwxr-xr-x -jre/languages/R/bin/COMPILE = rwxr-xr-x -jre/languages/R/bin/LINK = rwxr-xr-x -jre/languages/R/bin/Sweave = rwxr-xr-x -jre/languages/R/bin/BATCH = rwxr-xr-x -jre/languages/R/bin/install_r_native_image = rwxr-xr-x -jre/languages/R/bin/f77_f2c = rwxr-xr-x -jre/languages/R/bin/build = rwxr-xr-x -jre/languages/R/bin/mkinstalldirs = rwxr-xr-x -jre/languages/R/bin/Rdiff = rwxr-xr-x -jre/languages/R/bin/check = rwxr-xr-x -jre/languages/R/bin/Stangle = rwxr-xr-x -jre/languages/R/bin/pager = rwxr-xr-x -jre/languages/R/include/S.h = rw-r--r-- -jre/languages/R/include/Rinternals.h = rw-r--r-- -jre/languages/R/include/Makefile = rw-r--r-- -jre/languages/R/include/Rembedded.h = rw-r--r-- -jre/languages/R/include/Rconfig.h = rw-r--r-- -jre/languages/R/include/Rdefines.h = rw-r--r-- -jre/languages/R/include/linked = rw-r--r-- -jre/languages/R/include/Rmath.h = rw-r--r-- -jre/languages/R/include/R.h = rw-r--r-- -jre/languages/R/include/Rversion.h = rw-r--r-- -jre/languages/R/include/Rinterface.h = rw-r--r-- -jre/languages/R/include/R_ext/GraphicsEngine.h = rw-r--r-- -jre/languages/R/include/R_ext/R-ftp-http.h = rw-r--r-- -jre/languages/R/include/R_ext/Error.h = rw-r--r-- -jre/languages/R/include/R_ext/Itermacros.h = rw-r--r-- -jre/languages/R/include/R_ext/Utils.h = rw-r--r-- -jre/languages/R/include/R_ext/stats_stubs.h = rw-r--r-- -jre/languages/R/include/R_ext/GetX11Image.h = rw-r--r-- -jre/languages/R/include/R_ext/GraphicsDevice.h = rw-r--r-- -jre/languages/R/include/R_ext/Callbacks.h = rw-r--r-- -jre/languages/R/include/R_ext/Rdynload.h = rw-r--r-- -jre/languages/R/include/R_ext/Parse.h = rw-r--r-- -jre/languages/R/include/R_ext/RS.h = rw-r--r-- -jre/languages/R/include/R_ext/BLAS.h = rw-r--r-- -jre/languages/R/include/R_ext/Arith.h = rw-r--r-- -jre/languages/R/include/R_ext/Boolean.h = rw-r--r-- -jre/languages/R/include/R_ext/Applic.h = rw-r--r-- -jre/languages/R/include/R_ext/Linpack.h = rw-r--r-- -jre/languages/R/include/R_ext/Constants.h = rw-r--r-- -jre/languages/R/include/R_ext/Riconv.h = rw-r--r-- -jre/languages/R/include/R_ext/RStartup.h = rw-r--r-- -jre/languages/R/include/R_ext/Print.h = rw-r--r-- -jre/languages/R/include/R_ext/QuartzDevice.h = rw-r--r-- -jre/languages/R/include/R_ext/libextern.h = rw-r--r-- -jre/languages/R/include/R_ext/MathThreads.h = rw-r--r-- -jre/languages/R/include/R_ext/Memory.h = rw-r--r-- -jre/languages/R/include/R_ext/Connections.h = rw-r--r-- -jre/languages/R/include/R_ext/PrtUtil.h = rw-r--r-- -jre/languages/R/include/R_ext/Altrep.h = rw-r--r-- -jre/languages/R/include/R_ext/Rallocators.h = rw-r--r-- -jre/languages/R/include/R_ext/Visibility.h = rw-r--r-- -jre/languages/R/include/R_ext/stats_package.h = rw-r--r-- -jre/languages/R/include/R_ext/Complex.h = rw-r--r-- -jre/languages/R/include/R_ext/Lapack.h = rw-r--r-- -jre/languages/R/include/R_ext/Random.h = rw-r--r-- -jre/languages/R/include/R_ext/eventloop.h = rw-r--r-- -jre/languages/R/lib/libgfortran.dylib = rwxrwxrwx -jre/languages/R/lib/libz.dylib = rwxrwxrwx -jre/languages/R/lib/libpcre.1.dylib = rw-r--r-- -jre/languages/R/lib/libRblas.dylib = rwxr-xr-x -jre/languages/R/lib/libpcre.dylib = rwxrwxrwx -jre/languages/R/lib/libgfortran.3.dylib = rw-r--r-- -jre/languages/R/lib/libgcc_s.dylib = rwxrwxrwx -jre/languages/R/lib/libR.dylib = rwxr-xr-x -jre/languages/R/lib/libquadmath.0.dylib = rw-r--r-- -jre/languages/R/lib/libz.1.dylib = rw-r--r-- -jre/languages/R/lib/libgcc_s.1.dylib = rw-r--r-- -jre/languages/R/lib/libRlapack.dylib = rwxr-xr-x -jre/languages/R/lib/libquadmath.dylib = rwxrwxrwx -jre/languages/R/library/MASS/CITATION = rw-r--r-- -jre/languages/R/library/MASS/NAMESPACE = rw-r--r-- -jre/languages/R/library/MASS/DESCRIPTION = rw-r--r-- -jre/languages/R/library/MASS/NEWS = rw-r--r-- -jre/languages/R/library/MASS/INDEX = rw-r--r-- -jre/languages/R/library/MASS/R/profiles.R = rw-r--r-- -jre/languages/R/library/MASS/R/write.matrix.R = rw-r--r-- -jre/languages/R/library/MASS/R/MASS.rdx = rw-r--r-- -jre/languages/R/library/MASS/R/corresp.R = rw-r--r-- -jre/languages/R/library/MASS/R/fitdistr.R = rw-r--r-- -jre/languages/R/library/MASS/R/sammon.R = rw-r--r-- -jre/languages/R/library/MASS/R/logtrans.R = rw-r--r-- -jre/languages/R/library/MASS/R/MASS = rw-r--r-- -jre/languages/R/library/MASS/R/MASS.rdb = rw-r--r-- -jre/languages/R/library/MASS/R/dose.p.R = rw-r--r-- -jre/languages/R/library/MASS/R/stdres.R = rw-r--r-- -jre/languages/R/library/MASS/R/enlist.R = rw-r--r-- -jre/languages/R/library/MASS/R/add.R = rw-r--r-- -jre/languages/R/library/MASS/R/neg.bin.R = rw-r--r-- -jre/languages/R/library/MASS/R/contr.sdif.R = rw-r--r-- -jre/languages/R/library/MASS/R/misc.R = rw-r--r-- -jre/languages/R/library/MASS/R/cov.trob.R = rw-r--r-- -jre/languages/R/library/MASS/R/polr.R = rw-r--r-- -jre/languages/R/library/MASS/R/hist.scott.R = rw-r--r-- -jre/languages/R/library/MASS/R/lda.R = rw-r--r-- -jre/languages/R/library/MASS/R/stepAIC.R = rw-r--r-- -jre/languages/R/library/MASS/R/area.R = rw-r--r-- -jre/languages/R/library/MASS/R/rms.curv.R = rw-r--r-- -jre/languages/R/library/MASS/R/fractions.R = rw-r--r-- -jre/languages/R/library/MASS/R/eqscplot.R = rw-r--r-- -jre/languages/R/library/MASS/R/kde2d.R = rw-r--r-- -jre/languages/R/library/MASS/R/lm.ridge.R = rw-r--r-- -jre/languages/R/library/MASS/R/confint.R = rw-r--r-- -jre/languages/R/library/MASS/R/ucv.R = rw-r--r-- -jre/languages/R/library/MASS/R/loglm.R = rw-r--r-- -jre/languages/R/library/MASS/R/gamma.shape.R = rw-r--r-- -jre/languages/R/library/MASS/R/negexp.R = rw-r--r-- -jre/languages/R/library/MASS/R/mca.R = rw-r--r-- -jre/languages/R/library/MASS/R/rlm.R = rw-r--r-- -jre/languages/R/library/MASS/R/truehist.R = rw-r--r-- -jre/languages/R/library/MASS/R/negbin.R = rw-r--r-- -jre/languages/R/library/MASS/R/qda.R = rw-r--r-- -jre/languages/R/library/MASS/R/huber.R = rw-r--r-- -jre/languages/R/library/MASS/R/mvrnorm.R = rw-r--r-- -jre/languages/R/library/MASS/R/zzz.R = rw-r--r-- -jre/languages/R/library/MASS/R/boxcox.R = rw-r--r-- -jre/languages/R/library/MASS/R/lm.gls.R = rw-r--r-- -jre/languages/R/library/MASS/R/parcoord.R = rw-r--r-- -jre/languages/R/library/MASS/R/glmmPQL.R = rw-r--r-- -jre/languages/R/library/MASS/R/isoMDS.R = rw-r--r-- -jre/languages/R/library/MASS/R/hubers.R = rw-r--r-- -jre/languages/R/library/MASS/R/lqs.R = rw-r--r-- -jre/languages/R/library/MASS/Meta/data.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/links.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/features.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/package.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/MASS/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/MASS/html/R.css = rw-r--r-- -jre/languages/R/library/MASS/html/00Index.html = rw-r--r-- -jre/languages/R/library/MASS/libs/MASS.so = rwxr-xr-x -jre/languages/R/library/MASS/po/pl/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/en@quot/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/de/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/ko/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/po/fr/LC_MESSAGES/R-MASS.mo = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch13.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch07.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch09.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch03.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch10.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch14.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch04.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch11.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch15.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch05.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch01.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch12.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch16.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch06.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch02.R = rw-r--r-- -jre/languages/R/library/MASS/scripts/ch08.R = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/MASS/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/MASS/help/MASS.rdx = rw-r--r-- -jre/languages/R/library/MASS/help/MASS.rdb = rw-r--r-- -jre/languages/R/library/MASS/help/AnIndex = rw-r--r-- -jre/languages/R/library/MASS/help/aliases.rds = rw-r--r-- -jre/languages/R/library/MASS/help/paths.rds = rw-r--r-- -jre/languages/R/library/cluster/CITATION = rw-r--r-- -jre/languages/R/library/cluster/NEWS.Rd = rw-r--r-- -jre/languages/R/library/cluster/NAMESPACE = rw-r--r-- -jre/languages/R/library/cluster/DESCRIPTION = rw-r--r-- -jre/languages/R/library/cluster/INDEX = rw-r--r-- -jre/languages/R/library/cluster/test-tools.R = rw-r--r-- -jre/languages/R/library/cluster/R/internal.R = rw-r--r-- -jre/languages/R/library/cluster/R/clusGapGen.R = rw-r--r-- -jre/languages/R/library/cluster/R/0aaa.R = rw-r--r-- -jre/languages/R/library/cluster/R/cluster.rdb = rw-r--r-- -jre/languages/R/library/cluster/R/cluster.rdx = rw-r--r-- -jre/languages/R/library/cluster/R/cluster = rw-r--r-- -jre/languages/R/library/cluster/R/coef.R = rw-r--r-- -jre/languages/R/library/cluster/R/clara.q = rw-r--r-- -jre/languages/R/library/cluster/R/silhouette.R = rw-r--r-- -jre/languages/R/library/cluster/R/mona.q = rw-r--r-- -jre/languages/R/library/cluster/R/pam.q = rw-r--r-- -jre/languages/R/library/cluster/R/plothier.q = rw-r--r-- -jre/languages/R/library/cluster/R/fanny.q = rw-r--r-- -jre/languages/R/library/cluster/R/plotpart.q = rw-r--r-- -jre/languages/R/library/cluster/R/daisy.q = rw-r--r-- -jre/languages/R/library/cluster/R/clusGap.R = rw-r--r-- -jre/languages/R/library/cluster/R/zzz.R = rw-r--r-- -jre/languages/R/library/cluster/R/ellipsoidhull.R = rw-r--r-- -jre/languages/R/library/cluster/R/diana.q = rw-r--r-- -jre/languages/R/library/cluster/R/agnes.q = rw-r--r-- -jre/languages/R/library/cluster/Meta/data.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/links.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/features.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/package.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/cluster/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/cluster/html/R.css = rw-r--r-- -jre/languages/R/library/cluster/html/00Index.html = rw-r--r-- -jre/languages/R/library/cluster/libs/cluster.so = rwxr-xr-x -jre/languages/R/library/cluster/po/pl/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/en@quot/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/en@quot/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/de/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/de/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/ko/LC_MESSAGES/cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/ko/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/po/fr/LC_MESSAGES/R-cluster.mo = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/cluster/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/cluster/help/cluster.rdb = rw-r--r-- -jre/languages/R/library/cluster/help/cluster.rdx = rw-r--r-- -jre/languages/R/library/cluster/help/AnIndex = rw-r--r-- -jre/languages/R/library/cluster/help/aliases.rds = rw-r--r-- -jre/languages/R/library/cluster/help/paths.rds = rw-r--r-- -jre/languages/R/library/parallel/NAMESPACE = rw-r--r-- -jre/languages/R/library/parallel/DESCRIPTION = rw-r--r-- -jre/languages/R/library/parallel/INDEX = rw-r--r-- -jre/languages/R/library/parallel/R/parallel = rw-r--r-- -jre/languages/R/library/parallel/R/parallel.rdx = rw-r--r-- -jre/languages/R/library/parallel/R/parallel.rdb = rw-r--r-- -jre/languages/R/library/parallel/Meta/links.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/features.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/package.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/parallel/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/parallel/html/R.css = rw-r--r-- -jre/languages/R/library/parallel/html/00Index.html = rw-r--r-- -jre/languages/R/library/parallel/libs/parallel.so = rwxr-xr-x -jre/languages/R/library/parallel/doc/parallel.pdf = rw-r--r-- -jre/languages/R/library/parallel/help/AnIndex = rw-r--r-- -jre/languages/R/library/parallel/help/aliases.rds = rw-r--r-- -jre/languages/R/library/parallel/help/paths.rds = rw-r--r-- -jre/languages/R/library/parallel/help/parallel.rdx = rw-r--r-- -jre/languages/R/library/parallel/help/parallel.rdb = rw-r--r-- -jre/languages/R/library/tools/NAMESPACE = rw-r--r-- -jre/languages/R/library/tools/DESCRIPTION = rw-r--r-- -jre/languages/R/library/tools/INDEX = rw-r--r-- -jre/languages/R/library/tools/R/tools = rw-r--r-- -jre/languages/R/library/tools/R/tools.rdb = rw-r--r-- -jre/languages/R/library/tools/R/tools.rdx = rw-r--r-- -jre/languages/R/library/tools/R/sysdata.rdb = rw-r--r-- -jre/languages/R/library/tools/R/sysdata.rdx = rw-r--r-- -jre/languages/R/library/tools/Meta/links.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/features.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/package.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/tools/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/tools/html/R.css = rw-r--r-- -jre/languages/R/library/tools/html/00Index.html = rw-r--r-- -jre/languages/R/library/tools/libs/tools.so = rwxr-xr-x -jre/languages/R/library/tools/help/AnIndex = rw-r--r-- -jre/languages/R/library/tools/help/aliases.rds = rw-r--r-- -jre/languages/R/library/tools/help/tools.rdb = rw-r--r-- -jre/languages/R/library/tools/help/tools.rdx = rw-r--r-- -jre/languages/R/library/tools/help/paths.rds = rw-r--r-- -jre/languages/R/library/methods/NAMESPACE = rw-r--r-- -jre/languages/R/library/methods/DESCRIPTION = rw-r--r-- -jre/languages/R/library/methods/INDEX = rw-r--r-- -jre/languages/R/library/methods/R/methods = rw-r--r-- -jre/languages/R/library/methods/R/methods.rdx = rw-r--r-- -jre/languages/R/library/methods/R/methods.rdb = rw-r--r-- -jre/languages/R/library/methods/Meta/links.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/features.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/package.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/methods/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/methods/html/R.css = rw-r--r-- -jre/languages/R/library/methods/html/00Index.html = rw-r--r-- -jre/languages/R/library/methods/libs/methods.so = rwxr-xr-x -jre/languages/R/library/methods/help/AnIndex = rw-r--r-- -jre/languages/R/library/methods/help/aliases.rds = rw-r--r-- -jre/languages/R/library/methods/help/paths.rds = rw-r--r-- -jre/languages/R/library/methods/help/methods.rdx = rw-r--r-- -jre/languages/R/library/methods/help/methods.rdb = rw-r--r-- -jre/languages/R/library/boot/CITATION = rw-r--r-- -jre/languages/R/library/boot/NAMESPACE = rw-r--r-- -jre/languages/R/library/boot/bd.q = rw-r--r-- -jre/languages/R/library/boot/DESCRIPTION = rw-r--r-- -jre/languages/R/library/boot/INDEX = rw-r--r-- -jre/languages/R/library/boot/R/bootfuns.q = rw-r--r-- -jre/languages/R/library/boot/R/boot = rw-r--r-- -jre/languages/R/library/boot/R/bootpracs.q = rw-r--r-- -jre/languages/R/library/boot/R/boot.rdb = rw-r--r-- -jre/languages/R/library/boot/R/boot.rdx = rw-r--r-- -jre/languages/R/library/boot/Meta/data.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/links.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/features.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/package.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/boot/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/boot/html/R.css = rw-r--r-- -jre/languages/R/library/boot/html/00Index.html = rw-r--r-- -jre/languages/R/library/boot/po/pl/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/ru/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/en@quot/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/de/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/ko/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/po/fr/LC_MESSAGES/R-boot.mo = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/boot/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/boot/help/AnIndex = rw-r--r-- -jre/languages/R/library/boot/help/aliases.rds = rw-r--r-- -jre/languages/R/library/boot/help/paths.rds = rw-r--r-- -jre/languages/R/library/boot/help/boot.rdb = rw-r--r-- -jre/languages/R/library/boot/help/boot.rdx = rw-r--r-- -jre/languages/R/library/datasets/NAMESPACE = rw-r--r-- -jre/languages/R/library/datasets/DESCRIPTION = rw-r--r-- -jre/languages/R/library/datasets/INDEX = rw-r--r-- -jre/languages/R/library/datasets/Meta/data.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/links.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/features.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/package.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/datasets/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/datasets/html/R.css = rw-r--r-- -jre/languages/R/library/datasets/html/00Index.html = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/datasets/data/morley.tab = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/datasets/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/datasets/help/AnIndex = rw-r--r-- -jre/languages/R/library/datasets/help/aliases.rds = rw-r--r-- -jre/languages/R/library/datasets/help/paths.rds = rw-r--r-- -jre/languages/R/library/datasets/help/datasets.rdx = rw-r--r-- -jre/languages/R/library/datasets/help/datasets.rdb = rw-r--r-- -jre/languages/R/library/nnet/CITATION = rw-r--r-- -jre/languages/R/library/nnet/NAMESPACE = rw-r--r-- -jre/languages/R/library/nnet/DESCRIPTION = rw-r--r-- -jre/languages/R/library/nnet/NEWS = rw-r--r-- -jre/languages/R/library/nnet/INDEX = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.R = rw-r--r-- -jre/languages/R/library/nnet/R/nnet = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.rdx = rw-r--r-- -jre/languages/R/library/nnet/R/zzz.R = rw-r--r-- -jre/languages/R/library/nnet/R/multinom.R = rw-r--r-- -jre/languages/R/library/nnet/R/vcovmultinom.R = rw-r--r-- -jre/languages/R/library/nnet/R/nnet.rdb = rw-r--r-- -jre/languages/R/library/nnet/Meta/links.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/features.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/package.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/nnet/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/nnet/html/R.css = rw-r--r-- -jre/languages/R/library/nnet/html/00Index.html = rw-r--r-- -jre/languages/R/library/nnet/libs/nnet.so = rwxr-xr-x -jre/languages/R/library/nnet/po/pl/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/en@quot/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/de/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/ko/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/po/fr/LC_MESSAGES/R-nnet.mo = rw-r--r-- -jre/languages/R/library/nnet/help/AnIndex = rw-r--r-- -jre/languages/R/library/nnet/help/aliases.rds = rw-r--r-- -jre/languages/R/library/nnet/help/paths.rds = rw-r--r-- -jre/languages/R/library/nnet/help/nnet.rdx = rw-r--r-- -jre/languages/R/library/nnet/help/nnet.rdb = rw-r--r-- -jre/languages/R/library/utils/iconvlist = rw-r--r-- -jre/languages/R/library/utils/NAMESPACE = rw-r--r-- -jre/languages/R/library/utils/DESCRIPTION = rw-r--r-- -jre/languages/R/library/utils/INDEX = rw-r--r-- -jre/languages/R/library/utils/misc/exDIF.dif = rw-r--r-- -jre/languages/R/library/utils/misc/exDIF.csv = rw-r--r-- -jre/languages/R/library/utils/R/utils = rw-r--r-- -jre/languages/R/library/utils/R/sysdata.rdb = rw-r--r-- -jre/languages/R/library/utils/R/sysdata.rdx = rw-r--r-- -jre/languages/R/library/utils/R/utils.rdx = rw-r--r-- -jre/languages/R/library/utils/R/utils.rdb = rw-r--r-- -jre/languages/R/library/utils/Meta/links.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/features.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/package.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/utils/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/utils/html/R.css = rw-r--r-- -jre/languages/R/library/utils/html/00Index.html = rw-r--r-- -jre/languages/R/library/utils/libs/utils.so = rwxr-xr-x -jre/languages/R/library/utils/Sweave/Sweave-test-1.Rnw = rw-r--r-- -jre/languages/R/library/utils/Sweave/example-1.Rnw = rw-r--r-- -jre/languages/R/library/utils/doc/Sweave.pdf = rw-r--r-- -jre/languages/R/library/utils/help/AnIndex = rw-r--r-- -jre/languages/R/library/utils/help/aliases.rds = rw-r--r-- -jre/languages/R/library/utils/help/paths.rds = rw-r--r-- -jre/languages/R/library/utils/help/utils.rdx = rw-r--r-- -jre/languages/R/library/utils/help/utils.rdb = rw-r--r-- -jre/languages/R/library/stats4/NAMESPACE = rw-r--r-- -jre/languages/R/library/stats4/DESCRIPTION = rw-r--r-- -jre/languages/R/library/stats4/INDEX = rw-r--r-- -jre/languages/R/library/stats4/R/stats4 = rw-r--r-- -jre/languages/R/library/stats4/R/stats4.rdx = rw-r--r-- -jre/languages/R/library/stats4/R/stats4.rdb = rw-r--r-- -jre/languages/R/library/stats4/Meta/links.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/features.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/package.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/stats4/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/stats4/html/R.css = rw-r--r-- -jre/languages/R/library/stats4/html/00Index.html = rw-r--r-- -jre/languages/R/library/stats4/help/AnIndex = rw-r--r-- -jre/languages/R/library/stats4/help/aliases.rds = rw-r--r-- -jre/languages/R/library/stats4/help/paths.rds = rw-r--r-- -jre/languages/R/library/stats4/help/stats4.rdx = rw-r--r-- -jre/languages/R/library/stats4/help/stats4.rdb = rw-r--r-- -jre/languages/R/library/rpart/NEWS.Rd = rw-r--r-- -jre/languages/R/library/rpart/NAMESPACE = rw-r--r-- -jre/languages/R/library/rpart/DESCRIPTION = rw-r--r-- -jre/languages/R/library/rpart/INDEX = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.exp.R = rw-r--r-- -jre/languages/R/library/rpart/R/predict.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.class.R = rw-r--r-- -jre/languages/R/library/rpart/R/post.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpartco.R = rw-r--r-- -jre/languages/R/library/rpart/R/plotcp.R = rw-r--r-- -jre/languages/R/library/rpart/R/path.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/prune.R = rw-r--r-- -jre/languages/R/library/rpart/R/labels.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/pred.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/xpred.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/na.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/snip.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.anova.R = rw-r--r-- -jre/languages/R/library/rpart/R/text.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.control.R = rw-r--r-- -jre/languages/R/library/rpart/R/printcp.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.poisson.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart = rw-r--r-- -jre/languages/R/library/rpart/R/rsq.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/formatg.R = rw-r--r-- -jre/languages/R/library/rpart/R/prune.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.branch.R = rw-r--r-- -jre/languages/R/library/rpart/R/roc.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/snip.rpart.mouse.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.rdx = rw-r--r-- -jre/languages/R/library/rpart/R/meanvar.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.rdb = rw-r--r-- -jre/languages/R/library/rpart/R/post.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/zzz.R = rw-r--r-- -jre/languages/R/library/rpart/R/summary.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpartcallback.R = rw-r--r-- -jre/languages/R/library/rpart/R/importance.R = rw-r--r-- -jre/languages/R/library/rpart/R/residuals.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/rpart.matrix.R = rw-r--r-- -jre/languages/R/library/rpart/R/model.frame.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/print.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/R/plot.rpart.R = rw-r--r-- -jre/languages/R/library/rpart/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/data.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/links.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/features.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/package.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/rpart/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/rpart/html/R.css = rw-r--r-- -jre/languages/R/library/rpart/html/00Index.html = rw-r--r-- -jre/languages/R/library/rpart/libs/rpart.so = rwxr-xr-x -jre/languages/R/library/rpart/po/pl/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/pl/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ru/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ru/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/en@quot/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/en@quot/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/de/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/de/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ko/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/ko/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/fr/LC_MESSAGES/R-rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/po/fr/LC_MESSAGES/rpart.mo = rw-r--r-- -jre/languages/R/library/rpart/doc/index.html = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.R = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.Rnw = rw-r--r-- -jre/languages/R/library/rpart/doc/usercode.pdf = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.Rnw = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.pdf = rw-r--r-- -jre/languages/R/library/rpart/doc/longintro.R = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/rpart/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/rpart/help/AnIndex = rw-r--r-- -jre/languages/R/library/rpart/help/aliases.rds = rw-r--r-- -jre/languages/R/library/rpart/help/paths.rds = rw-r--r-- -jre/languages/R/library/rpart/help/rpart.rdx = rw-r--r-- -jre/languages/R/library/rpart/help/rpart.rdb = rw-r--r-- -jre/languages/R/library/lattice/CITATION = rw-r--r-- -jre/languages/R/library/lattice/NAMESPACE = rw-r--r-- -jre/languages/R/library/lattice/DESCRIPTION = rw-r--r-- -jre/languages/R/library/lattice/NEWS = rw-r--r-- -jre/languages/R/library/lattice/INDEX = rw-r--r-- -jre/languages/R/library/lattice/demo/intervals.R = rw-r--r-- -jre/languages/R/library/lattice/demo/panel.R = rw-r--r-- -jre/languages/R/library/lattice/demo/lattice.R = rw-r--r-- -jre/languages/R/library/lattice/demo/labels.R = rw-r--r-- -jre/languages/R/library/lattice/R/qq.R = rw-r--r-- -jre/languages/R/library/lattice/R/axis.R = rw-r--r-- -jre/languages/R/library/lattice/R/shingle.R = rw-r--r-- -jre/languages/R/library/lattice/R/settings.R = rw-r--r-- -jre/languages/R/library/lattice/R/summary.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/qqmath.R = rw-r--r-- -jre/languages/R/library/lattice/R/legend.R = rw-r--r-- -jre/languages/R/library/lattice/R/densityplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/panel.smoothscatter.R = rw-r--r-- -jre/languages/R/library/lattice/R/rfs.R = rw-r--r-- -jre/languages/R/library/lattice/R/interaction.R = rw-r--r-- -jre/languages/R/library/lattice/R/xyplot.ts.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice.rdb = rw-r--r-- -jre/languages/R/library/lattice/R/update.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/bwplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/cloud.R = rw-r--r-- -jre/languages/R/library/lattice/R/panel.superpose.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice.rdx = rw-r--r-- -jre/languages/R/library/lattice/R/panel.smooth.R = rw-r--r-- -jre/languages/R/library/lattice/R/levelplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/lattice = rw-r--r-- -jre/languages/R/library/lattice/R/common.R = rw-r--r-- -jre/languages/R/library/lattice/R/panels.R = rw-r--r-- -jre/languages/R/library/lattice/R/layout.R = rw-r--r-- -jre/languages/R/library/lattice/R/miscellaneous.R = rw-r--r-- -jre/languages/R/library/lattice/R/make.groups.R = rw-r--r-- -jre/languages/R/library/lattice/R/histogram.R = rw-r--r-- -jre/languages/R/library/lattice/R/strip.R = rw-r--r-- -jre/languages/R/library/lattice/R/xyplot.R = rw-r--r-- -jre/languages/R/library/lattice/R/scales.R = rw-r--r-- -jre/languages/R/library/lattice/R/zzz.R = rw-r--r-- -jre/languages/R/library/lattice/R/splom.R = rw-r--r-- -jre/languages/R/library/lattice/R/print.trellis.R = rw-r--r-- -jre/languages/R/library/lattice/R/tmd.R = rw-r--r-- -jre/languages/R/library/lattice/R/parallel.R = rw-r--r-- -jre/languages/R/library/lattice/Meta/data.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/links.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/features.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/package.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/lattice/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/lattice/html/R.css = rw-r--r-- -jre/languages/R/library/lattice/html/00Index.html = rw-r--r-- -jre/languages/R/library/lattice/libs/lattice.so = rwxr-xr-x -jre/languages/R/library/lattice/po/pl/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/en@quot/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/de/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/ko/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/po/fr/LC_MESSAGES/R-lattice.mo = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/lattice/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/lattice/help/AnIndex = rw-r--r-- -jre/languages/R/library/lattice/help/aliases.rds = rw-r--r-- -jre/languages/R/library/lattice/help/lattice.rdb = rw-r--r-- -jre/languages/R/library/lattice/help/lattice.rdx = rw-r--r-- -jre/languages/R/library/lattice/help/paths.rds = rw-r--r-- -jre/languages/R/library/nlme/CITATION = rw-r--r-- -jre/languages/R/library/nlme/NAMESPACE = rw-r--r-- -jre/languages/R/library/nlme/DESCRIPTION = rw-r--r-- -jre/languages/R/library/nlme/INDEX = rw-r--r-- -jre/languages/R/library/nlme/LICENCE = rw-r--r-- -jre/languages/R/library/nlme/mlbook/ch04.R = rw-r--r-- -jre/languages/R/library/nlme/mlbook/README = rw-r--r-- -jre/languages/R/library/nlme/mlbook/ch05.R = rw-r--r-- -jre/languages/R/library/nlme/R/gls.R = rw-r--r-- -jre/languages/R/library/nlme/R/simulate.R = rw-r--r-- -jre/languages/R/library/nlme/R/pdMat.R = rw-r--r-- -jre/languages/R/library/nlme/R/corStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/newFunc.R = rw-r--r-- -jre/languages/R/library/nlme/R/gnls.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.rdb = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.rdx = rw-r--r-- -jre/languages/R/library/nlme/R/VarCov.R = rw-r--r-- -jre/languages/R/library/nlme/R/lmList.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme = rw-r--r-- -jre/languages/R/library/nlme/R/reStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/newMethods.R = rw-r--r-- -jre/languages/R/library/nlme/R/zzMethods.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlsList.R = rw-r--r-- -jre/languages/R/library/nlme/R/VarCorr.R = rw-r--r-- -jre/languages/R/library/nlme/R/nlme.R = rw-r--r-- -jre/languages/R/library/nlme/R/newGenerics.R = rw-r--r-- -jre/languages/R/library/nlme/R/lme.R = rw-r--r-- -jre/languages/R/library/nlme/R/varFunc.R = rw-r--r-- -jre/languages/R/library/nlme/R/modelStruct.R = rw-r--r-- -jre/languages/R/library/nlme/R/groupedData.R = rw-r--r-- -jre/languages/R/library/nlme/Meta/data.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/links.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/features.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/package.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/nlme/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/nlme/html/R.css = rw-r--r-- -jre/languages/R/library/nlme/html/00Index.html = rw-r--r-- -jre/languages/R/library/nlme/libs/nlme.so = rwxr-xr-x -jre/languages/R/library/nlme/po/pl/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/pl/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/en@quot/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/en@quot/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/de/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/de/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/ko/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/ko/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/fr/LC_MESSAGES/R-nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/po/fr/LC_MESSAGES/nlme.mo = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch03.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch04.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/runme.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/sims.rda = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch05.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch01.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch06.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch02.R = rw-r--r-- -jre/languages/R/library/nlme/scripts/ch08.R = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/nlme/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/nlme/help/AnIndex = rw-r--r-- -jre/languages/R/library/nlme/help/aliases.rds = rw-r--r-- -jre/languages/R/library/nlme/help/nlme.rdb = rw-r--r-- -jre/languages/R/library/nlme/help/nlme.rdx = rw-r--r-- -jre/languages/R/library/nlme/help/paths.rds = rw-r--r-- -jre/languages/R/library/splines/NAMESPACE = rw-r--r-- -jre/languages/R/library/splines/DESCRIPTION = rw-r--r-- -jre/languages/R/library/splines/INDEX = rw-r--r-- -jre/languages/R/library/splines/R/splines = rw-r--r-- -jre/languages/R/library/splines/R/splines.rdb = rw-r--r-- -jre/languages/R/library/splines/R/splines.rdx = rw-r--r-- -jre/languages/R/library/splines/Meta/links.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/features.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/package.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/splines/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/splines/html/R.css = rw-r--r-- -jre/languages/R/library/splines/html/00Index.html = rw-r--r-- -jre/languages/R/library/splines/libs/splines.so = rwxr-xr-x -jre/languages/R/library/splines/help/AnIndex = rw-r--r-- -jre/languages/R/library/splines/help/aliases.rds = rw-r--r-- -jre/languages/R/library/splines/help/paths.rds = rw-r--r-- -jre/languages/R/library/splines/help/splines.rdb = rw-r--r-- -jre/languages/R/library/splines/help/splines.rdx = rw-r--r-- -jre/languages/R/library/grDevices/NAMESPACE = rw-r--r-- -jre/languages/R/library/grDevices/DESCRIPTION = rw-r--r-- -jre/languages/R/library/grDevices/INDEX = rw-r--r-- -jre/languages/R/library/grDevices/demo/hclColors.R = rw-r--r-- -jre/languages/R/library/grDevices/demo/colors.R = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices.rdb = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices.rdx = rw-r--r-- -jre/languages/R/library/grDevices/R/grDevices = rw-r--r-- -jre/languages/R/library/grDevices/Meta/links.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/features.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/package.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/grDevices/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/grDevices/html/R.css = rw-r--r-- -jre/languages/R/library/grDevices/html/00Index.html = rw-r--r-- -jre/languages/R/library/grDevices/icc/srgb = rw-r--r-- -jre/languages/R/library/grDevices/icc/srgb.flate = rw-r--r-- -jre/languages/R/library/grDevices/afm/cob_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvbo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvnbo___.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019064l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agd_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncb_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-Oblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/s050000l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkdi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/poi_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvno____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agw_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019043l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Roman.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvnb____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/sy______.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059013l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvo_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tii_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-Oblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncr_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010015l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Italic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/MustRead.html = rw-r--r-- -jre/languages/R/library/grDevices/afm/Symbol.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010033l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/com_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018015l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ncbi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkd_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-BoldItalic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018032l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_regular_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059036l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/README = rw-r--r-- -jre/languages/R/library/grDevices/afm/cmti10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059033l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ArialMT-Italic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agwo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvn_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-BoldOblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019063l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tibi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/coo_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/por_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/agdo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_symbol_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n021003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/ZapfDingbats.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/p052004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/cobo____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hvb_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Times-BoldItalic.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Helvetica-Bold.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkli____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019044l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/pobi____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tir_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018012l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/bkl_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/nci_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_boldx_italic_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/hv______.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_italic_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/c059016l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/pob_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022004l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019024l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier-BoldOblique.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010013l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/cmbxti10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/tib_____.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/b018035l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n022023l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/Courier.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/CM_boldx_10.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/n019003l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/afm/a010035l.afm.gz = rw-r--r-- -jre/languages/R/library/grDevices/libs/grDevices.so = rwxr-xr-x -jre/languages/R/library/grDevices/enc/AdobeSym.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin7.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin2.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin1.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/Greek.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1257.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1250.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/TeXtext.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/PDFDoc.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1251.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/CP1253.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/KOI8-U.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/Cyrillic.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/MacRoman.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/AdobeStd.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/KOI8-R.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/ISOLatin9.enc = rw-r--r-- -jre/languages/R/library/grDevices/enc/WinAnsi.enc = rw-r--r-- -jre/languages/R/library/grDevices/help/AnIndex = rw-r--r-- -jre/languages/R/library/grDevices/help/grDevices.rdb = rw-r--r-- -jre/languages/R/library/grDevices/help/grDevices.rdx = rw-r--r-- -jre/languages/R/library/grDevices/help/aliases.rds = rw-r--r-- -jre/languages/R/library/grDevices/help/paths.rds = rw-r--r-- -jre/languages/R/library/class/CITATION = rw-r--r-- -jre/languages/R/library/class/NAMESPACE = rw-r--r-- -jre/languages/R/library/class/DESCRIPTION = rw-r--r-- -jre/languages/R/library/class/NEWS = rw-r--r-- -jre/languages/R/library/class/INDEX = rw-r--r-- -jre/languages/R/library/class/R/class.rdb = rw-r--r-- -jre/languages/R/library/class/R/class.rdx = rw-r--r-- -jre/languages/R/library/class/R/multiedit.R = rw-r--r-- -jre/languages/R/library/class/R/SOM.R = rw-r--r-- -jre/languages/R/library/class/R/lvq.R = rw-r--r-- -jre/languages/R/library/class/R/class = rw-r--r-- -jre/languages/R/library/class/R/zzz.R = rw-r--r-- -jre/languages/R/library/class/R/knn.R = rw-r--r-- -jre/languages/R/library/class/Meta/links.rds = rw-r--r-- -jre/languages/R/library/class/Meta/features.rds = rw-r--r-- -jre/languages/R/library/class/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/class/Meta/package.rds = rw-r--r-- -jre/languages/R/library/class/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/class/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/class/html/R.css = rw-r--r-- -jre/languages/R/library/class/html/00Index.html = rw-r--r-- -jre/languages/R/library/class/libs/class.so = rwxr-xr-x -jre/languages/R/library/class/po/pl/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/en@quot/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/de/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/ko/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/po/fr/LC_MESSAGES/R-class.mo = rw-r--r-- -jre/languages/R/library/class/help/class.rdb = rw-r--r-- -jre/languages/R/library/class/help/class.rdx = rw-r--r-- -jre/languages/R/library/class/help/AnIndex = rw-r--r-- -jre/languages/R/library/class/help/aliases.rds = rw-r--r-- -jre/languages/R/library/class/help/paths.rds = rw-r--r-- -jre/languages/R/library/codetools/NAMESPACE = rw-r--r-- -jre/languages/R/library/codetools/DESCRIPTION = rw-r--r-- -jre/languages/R/library/codetools/INDEX = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.rdx = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.R = rw-r--r-- -jre/languages/R/library/codetools/R/codetools.rdb = rw-r--r-- -jre/languages/R/library/codetools/R/codetools = rw-r--r-- -jre/languages/R/library/codetools/Meta/links.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/features.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/package.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/codetools/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/codetools/html/R.css = rw-r--r-- -jre/languages/R/library/codetools/html/00Index.html = rw-r--r-- -jre/languages/R/library/codetools/help/AnIndex = rw-r--r-- -jre/languages/R/library/codetools/help/codetools.rdx = rw-r--r-- -jre/languages/R/library/codetools/help/codetools.rdb = rw-r--r-- -jre/languages/R/library/codetools/help/aliases.rds = rw-r--r-- -jre/languages/R/library/codetools/help/paths.rds = rw-r--r-- -jre/languages/R/library/spatial/CITATION = rw-r--r-- -jre/languages/R/library/spatial/PP.files = rw-r--r-- -jre/languages/R/library/spatial/NAMESPACE = rw-r--r-- -jre/languages/R/library/spatial/DESCRIPTION = rw-r--r-- -jre/languages/R/library/spatial/NEWS = rw-r--r-- -jre/languages/R/library/spatial/INDEX = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig1c.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/davis.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig1b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/cells.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pines.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/caveolae.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pereg.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/hccells.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/agter.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/eagles.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/tokyo.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/grocery.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/drumlin.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/pairfn.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/nztrees.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig2a.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/redwood.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig2b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/towns.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3b.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/stowns1.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3c.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/schools.dat = rw-r--r-- -jre/languages/R/library/spatial/ppdata/fig3a.dat = rw-r--r-- -jre/languages/R/library/spatial/R/kr.R = rw-r--r-- -jre/languages/R/library/spatial/R/zzz.R = rw-r--r-- -jre/languages/R/library/spatial/R/spatial = rw-r--r-- -jre/languages/R/library/spatial/R/spatial.rdb = rw-r--r-- -jre/languages/R/library/spatial/R/spatial.rdx = rw-r--r-- -jre/languages/R/library/spatial/R/pp.R = rw-r--r-- -jre/languages/R/library/spatial/Meta/links.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/features.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/package.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/spatial/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/spatial/html/R.css = rw-r--r-- -jre/languages/R/library/spatial/html/00Index.html = rw-r--r-- -jre/languages/R/library/spatial/libs/spatial.so = rwxr-xr-x -jre/languages/R/library/spatial/po/pl/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/en@quot/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/de/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/ko/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/po/fr/LC_MESSAGES/R-spatial.mo = rw-r--r-- -jre/languages/R/library/spatial/help/AnIndex = rw-r--r-- -jre/languages/R/library/spatial/help/aliases.rds = rw-r--r-- -jre/languages/R/library/spatial/help/paths.rds = rw-r--r-- -jre/languages/R/library/spatial/help/spatial.rdb = rw-r--r-- -jre/languages/R/library/spatial/help/spatial.rdx = rw-r--r-- -jre/languages/R/library/graphics/NAMESPACE = rw-r--r-- -jre/languages/R/library/graphics/DESCRIPTION = rw-r--r-- -jre/languages/R/library/graphics/INDEX = rw-r--r-- -jre/languages/R/library/graphics/demo/Japanese.R = rw-r--r-- -jre/languages/R/library/graphics/demo/plotmath.R = rw-r--r-- -jre/languages/R/library/graphics/demo/persp.R = rw-r--r-- -jre/languages/R/library/graphics/demo/graphics.R = rw-r--r-- -jre/languages/R/library/graphics/demo/image.R = rw-r--r-- -jre/languages/R/library/graphics/demo/Hershey.R = rw-r--r-- -jre/languages/R/library/graphics/R/graphics.rdb = rw-r--r-- -jre/languages/R/library/graphics/R/graphics.rdx = rw-r--r-- -jre/languages/R/library/graphics/R/graphics = rw-r--r-- -jre/languages/R/library/graphics/Meta/links.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/features.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/package.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/graphics/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/graphics/html/R.css = rw-r--r-- -jre/languages/R/library/graphics/html/00Index.html = rw-r--r-- -jre/languages/R/library/graphics/libs/graphics.so = rwxr-xr-x -jre/languages/R/library/graphics/help/AnIndex = rw-r--r-- -jre/languages/R/library/graphics/help/aliases.rds = rw-r--r-- -jre/languages/R/library/graphics/help/graphics.rdb = rw-r--r-- -jre/languages/R/library/graphics/help/graphics.rdx = rw-r--r-- -jre/languages/R/library/graphics/help/paths.rds = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.svg = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/pch.pdf = rw-r--r-- -jre/languages/R/library/graphics/help/figures/oma.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/oma.pdf = rw-r--r-- -jre/languages/R/library/graphics/help/figures/mai.png = rw-r--r-- -jre/languages/R/library/graphics/help/figures/mai.pdf = rw-r--r-- -jre/languages/R/library/foreign/COPYRIGHTS = rw-r--r-- -jre/languages/R/library/foreign/NAMESPACE = rw-r--r-- -jre/languages/R/library/foreign/DESCRIPTION = rw-r--r-- -jre/languages/R/library/foreign/INDEX = rw-r--r-- -jre/languages/R/library/foreign/R/read.dta.R = rw-r--r-- -jre/languages/R/library/foreign/R/read.ssd.R = rw-r--r-- -jre/languages/R/library/foreign/R/minitab.R = rw-r--r-- -jre/languages/R/library/foreign/R/dbf.R = rw-r--r-- -jre/languages/R/library/foreign/R/octave.R = rw-r--r-- -jre/languages/R/library/foreign/R/spss.R = rw-r--r-- -jre/languages/R/library/foreign/R/R_systat.R = rw-r--r-- -jre/languages/R/library/foreign/R/xport.R = rw-r--r-- -jre/languages/R/library/foreign/R/zzz.R = rw-r--r-- -jre/languages/R/library/foreign/R/read.epiinfo.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign.rdb = rw-r--r-- -jre/languages/R/library/foreign/R/Sread.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign.rdx = rw-r--r-- -jre/languages/R/library/foreign/R/arff.R = rw-r--r-- -jre/languages/R/library/foreign/R/writeForeignSAS.R = rw-r--r-- -jre/languages/R/library/foreign/R/foreign = rw-r--r-- -jre/languages/R/library/foreign/R/writeForeignCode.R = rw-r--r-- -jre/languages/R/library/foreign/Meta/links.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/features.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/package.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/foreign/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/foreign/html/R.css = rw-r--r-- -jre/languages/R/library/foreign/html/00Index.html = rw-r--r-- -jre/languages/R/library/foreign/libs/foreign.so = rwxr-xr-x -jre/languages/R/library/foreign/po/pl/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/pl/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/en@quot/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/en@quot/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/de/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/de/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/fr/LC_MESSAGES/R-foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/po/fr/LC_MESSAGES/foreign.mo = rw-r--r-- -jre/languages/R/library/foreign/files/electric.sav = rw-r--r-- -jre/languages/R/library/foreign/files/Iris.syd = rw-r--r-- -jre/languages/R/library/foreign/files/testdata.sav = rw-r--r-- -jre/languages/R/library/foreign/files/HillRace.SYD = rw-r--r-- -jre/languages/R/library/foreign/files/sids.dbf = rwxr-xr-x -jre/languages/R/library/foreign/help/AnIndex = rw-r--r-- -jre/languages/R/library/foreign/help/aliases.rds = rw-r--r-- -jre/languages/R/library/foreign/help/paths.rds = rw-r--r-- -jre/languages/R/library/foreign/help/foreign.rdb = rw-r--r-- -jre/languages/R/library/foreign/help/foreign.rdx = rw-r--r-- -jre/languages/R/library/compiler/NAMESPACE = rw-r--r-- -jre/languages/R/library/compiler/DESCRIPTION = rw-r--r-- -jre/languages/R/library/compiler/INDEX = rw-r--r-- -jre/languages/R/library/compiler/R/compiler = rw-r--r-- -jre/languages/R/library/compiler/R/compiler.rdx = rw-r--r-- -jre/languages/R/library/compiler/R/compiler.rdb = rw-r--r-- -jre/languages/R/library/compiler/Meta/links.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/features.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/package.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/compiler/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/compiler/html/R.css = rw-r--r-- -jre/languages/R/library/compiler/html/00Index.html = rw-r--r-- -jre/languages/R/library/compiler/help/AnIndex = rw-r--r-- -jre/languages/R/library/compiler/help/aliases.rds = rw-r--r-- -jre/languages/R/library/compiler/help/paths.rds = rw-r--r-- -jre/languages/R/library/compiler/help/compiler.rdx = rw-r--r-- -jre/languages/R/library/compiler/help/compiler.rdb = rw-r--r-- -jre/languages/R/library/Matrix/Copyrights = rw-r--r-- -jre/languages/R/library/Matrix/NEWS.Rd = rw-r--r-- -jre/languages/R/library/Matrix/test-tools-1.R = rw-r--r-- -jre/languages/R/library/Matrix/NAMESPACE = rw-r--r-- -jre/languages/R/library/Matrix/DESCRIPTION = rw-r--r-- -jre/languages/R/library/Matrix/INDEX = rw-r--r-- -jre/languages/R/library/Matrix/test-tools-Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/Doxyfile = rw-r--r-- -jre/languages/R/library/Matrix/test-tools.R = rw-r--r-- -jre/languages/R/library/Matrix/LICENCE = rw-r--r-- -jre/languages/R/library/Matrix/include/Matrix.h = rw-r--r-- -jre/languages/R/library/Matrix/include/Matrix_stubs.c = rw-r--r-- -jre/languages/R/library/Matrix/include/cholmod.h = rw-r--r-- -jre/languages/R/library/Matrix/R/expm.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Auxiliaries.R = rw-r--r-- -jre/languages/R/library/Matrix/R/corMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ngTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/rankMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ndenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/SparseM-conv.R = rw-r--r-- -jre/languages/R/library/Matrix/R/indMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseQR.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Tsparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ntCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/spModels.R = rw-r--r-- -jre/languages/R/library/Matrix/R/LU.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dppMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/AllClass.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Csparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/pMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ntTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/MatrixFactorization.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ddenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/AllGeneric.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/kronecker.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.rdb = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.rdx = rw-r--r-- -jre/languages/R/library/Matrix/R/not.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ngCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dpoMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/denseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/triangularMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/KhatriRao.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtrMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dspMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/bind2.R = rw-r--r-- -jre/languages/R/library/Matrix/R/abIndex.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsyMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/condest.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Rsparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lgTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/eigen.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Math.R = rw-r--r-- -jre/languages/R/library/Matrix/R/sparseVector.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dgeMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nnzero.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ltCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/zzz.R = rw-r--r-- -jre/languages/R/library/Matrix/R/CHMfactor.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Hilbert.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lsCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ltTMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Ops.R = rw-r--r-- -jre/languages/R/library/Matrix/R/nsparseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/diagMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Matrix = rw-r--r-- -jre/languages/R/library/Matrix/R/nearPD.R = rw-r--r-- -jre/languages/R/library/Matrix/R/products.R = rw-r--r-- -jre/languages/R/library/Matrix/R/dtpMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/colSums.R = rw-r--r-- -jre/languages/R/library/Matrix/R/HBMM.R = rw-r--r-- -jre/languages/R/library/Matrix/R/Summary.R = rw-r--r-- -jre/languages/R/library/Matrix/R/ldenseMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/bandSparse.R = rw-r--r-- -jre/languages/R/library/Matrix/R/lgCMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/R/symmetricMatrix.R = rw-r--r-- -jre/languages/R/library/Matrix/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/data.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/links.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/features.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/package.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/Matrix/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/Matrix/html/R.css = rw-r--r-- -jre/languages/R/library/Matrix/html/00Index.html = rw-r--r-- -jre/languages/R/library/Matrix/libs/Matrix.so = rwxr-xr-x -jre/languages/R/library/Matrix/po/pl/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/pl/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/en@quot/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/en@quot/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/de/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/de/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/ko/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/fr/LC_MESSAGES/Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/po/fr/LC_MESSAGES/R-Matrix.mo = rw-r--r-- -jre/languages/R/library/Matrix/doc/index.html = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Announce.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/Design-issues.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Comparisons.R = rw-r--r-- -jre/languages/R/library/Matrix/doc/sparseModels.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Introduction.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.pdf = rw-r--r-- -jre/languages/R/library/Matrix/doc/Intro2Matrix.Rnw = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/SPQR.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/CHOLMOD.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/SuiteSparse_config.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/UserGuides.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/AMD.txt = rw-r--r-- -jre/languages/R/library/Matrix/doc/SuiteSparse/COLAMD.txt = rw-r--r-- -jre/languages/R/library/Matrix/external/lund_a.rsa = rw-r--r-- -jre/languages/R/library/Matrix/external/CAex_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/test3comp.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/utm300.rua = rw-r--r-- -jre/languages/R/library/Matrix/external/USCounties_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/lund_a.mtx = rw-r--r-- -jre/languages/R/library/Matrix/external/wrong.mtx = rw-r--r-- -jre/languages/R/library/Matrix/external/symA.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/KNex_slots.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/symW.rda = rw-r--r-- -jre/languages/R/library/Matrix/external/pores_1.mtx = rw-r--r-- -jre/languages/R/library/Matrix/data/KNex.R = rw-r--r-- -jre/languages/R/library/Matrix/data/CAex.R = rw-r--r-- -jre/languages/R/library/Matrix/data/USCounties.R = rw-r--r-- -jre/languages/R/library/Matrix/help/AnIndex = rw-r--r-- -jre/languages/R/library/Matrix/help/aliases.rds = rw-r--r-- -jre/languages/R/library/Matrix/help/Matrix.rdb = rw-r--r-- -jre/languages/R/library/Matrix/help/Matrix.rdx = rw-r--r-- -jre/languages/R/library/Matrix/help/paths.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/NAMESPACE = rw-r--r-- -jre/languages/R/library/KernSmooth/DESCRIPTION = rw-r--r-- -jre/languages/R/library/KernSmooth/INDEX = rw-r--r-- -jre/languages/R/library/KernSmooth/R/all.R = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth.rdb = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth.rdx = rw-r--r-- -jre/languages/R/library/KernSmooth/R/KernSmooth = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/links.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/features.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/package.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/html/R.css = rw-r--r-- -jre/languages/R/library/KernSmooth/html/00Index.html = rw-r--r-- -jre/languages/R/library/KernSmooth/libs/KernSmooth.so = rwxr-xr-x -jre/languages/R/library/KernSmooth/po/pl/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/en@quot/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/de/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/ko/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/po/fr/LC_MESSAGES/R-KernSmooth.mo = rw-r--r-- -jre/languages/R/library/KernSmooth/help/AnIndex = rw-r--r-- -jre/languages/R/library/KernSmooth/help/aliases.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/help/paths.rds = rw-r--r-- -jre/languages/R/library/KernSmooth/help/KernSmooth.rdb = rw-r--r-- -jre/languages/R/library/KernSmooth/help/KernSmooth.rdx = rw-r--r-- -jre/languages/R/library/base/CITATION = rw-r--r-- -jre/languages/R/library/base/DESCRIPTION = rw-r--r-- -jre/languages/R/library/base/INDEX = rw-r--r-- -jre/languages/R/library/base/demo/scoping.R = rw-r--r-- -jre/languages/R/library/base/demo/error.catching.R = rw-r--r-- -jre/languages/R/library/base/demo/is.things.R = rw-r--r-- -jre/languages/R/library/base/demo/recursion.R = rw-r--r-- -jre/languages/R/library/base/R/Rprofile = rw-r--r-- -jre/languages/R/library/base/R/base.rdx = rw-r--r-- -jre/languages/R/library/base/R/base.rdb = rw-r--r-- -jre/languages/R/library/base/R/base = rw-r--r-- -jre/languages/R/library/base/Meta/links.rds = rw-r--r-- -jre/languages/R/library/base/Meta/features.rds = rw-r--r-- -jre/languages/R/library/base/Meta/package.rds = rw-r--r-- -jre/languages/R/library/base/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/base/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/base/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/base/html/R.css = rw-r--r-- -jre/languages/R/library/base/html/00Index.html = rw-r--r-- -jre/languages/R/library/base/libs/base.so = rwxr-xr-x -jre/languages/R/library/base/help/AnIndex = rw-r--r-- -jre/languages/R/library/base/help/aliases.rds = rw-r--r-- -jre/languages/R/library/base/help/paths.rds = rw-r--r-- -jre/languages/R/library/base/help/base.rdx = rw-r--r-- -jre/languages/R/library/base/help/base.rdb = rw-r--r-- -jre/languages/R/library/stats/COPYRIGHTS.modreg = rw-r--r-- -jre/languages/R/library/stats/NAMESPACE = rw-r--r-- -jre/languages/R/library/stats/SOURCES.ts = rw-r--r-- -jre/languages/R/library/stats/DESCRIPTION = rw-r--r-- -jre/languages/R/library/stats/INDEX = rw-r--r-- -jre/languages/R/library/stats/demo/smooth.R = rw-r--r-- -jre/languages/R/library/stats/demo/lm.glm.R = rw-r--r-- -jre/languages/R/library/stats/demo/nlm.R = rw-r--r-- -jre/languages/R/library/stats/demo/glm.vr.R = rw-r--r-- -jre/languages/R/library/stats/R/stats.rdx = rw-r--r-- -jre/languages/R/library/stats/R/stats.rdb = rw-r--r-- -jre/languages/R/library/stats/R/stats = rw-r--r-- -jre/languages/R/library/stats/Meta/links.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/features.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/package.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/stats/Meta/demo.rds = rw-r--r-- -jre/languages/R/library/stats/html/R.css = rw-r--r-- -jre/languages/R/library/stats/html/00Index.html = rw-r--r-- -jre/languages/R/library/stats/libs/stats.so = rwxr-xr-x -jre/languages/R/library/stats/help/AnIndex = rw-r--r-- -jre/languages/R/library/stats/help/aliases.rds = rw-r--r-- -jre/languages/R/library/stats/help/stats.rdx = rw-r--r-- -jre/languages/R/library/stats/help/paths.rds = rw-r--r-- -jre/languages/R/library/stats/help/stats.rdb = rw-r--r-- -jre/languages/R/library/survival/CITATION = rw-r--r-- -jre/languages/R/library/survival/COPYRIGHTS = rw-r--r-- -jre/languages/R/library/survival/NEWS.Rd = rw-r--r-- -jre/languages/R/library/survival/NAMESPACE = rw-r--r-- -jre/languages/R/library/survival/DESCRIPTION = rw-r--r-- -jre/languages/R/library/survival/INDEX = rw-r--r-- -jre/languages/R/library/survival/R/print.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/plot.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cluster.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gamma.S = rw-r--r-- -jre/languages/R/library/survival/R/aareg.taper.R = rw-r--r-- -jre/languages/R/library/survival/R/survival.rdb = rw-r--r-- -jre/languages/R/library/survival/R/pspline.R = rw-r--r-- -jre/languages/R/library/survival/R/plot.survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/print.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/survival.rdx = rw-r--r-- -jre/languages/R/library/survival/R/coxph.getdata.S = rw-r--r-- -jre/languages/R/library/survival/R/coxph.rvar.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlgam.S = rw-r--r-- -jre/languages/R/library/survival/R/survfit.matrix.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survfit.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.cfit.R = rw-r--r-- -jre/languages/R/library/survival/R/survobrien.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/tmerge.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxph.penal.R = rw-r--r-- -jre/languages/R/library/survival/R/plot.cox.zph.S = rw-r--r-- -jre/languages/R/library/survival/R/basehaz.R = rw-r--r-- -jre/languages/R/library/survival/R/format.Surv.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/normalizetime.R = rw-r--r-- -jre/languages/R/library/survival/R/survfit.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/residuals.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gammacon.S = rw-r--r-- -jre/languages/R/library/survival/R/is.na.coxph.penalty.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cch.R = rw-r--r-- -jre/languages/R/library/survival/R/lines.survfit.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/anova.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/is.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/statefig.R = rw-r--r-- -jre/languages/R/library/survival/R/survreg.control.S = rw-r--r-- -jre/languages/R/library/survival/R/survreg.distributions.S = rw-r--r-- -jre/languages/R/library/survival/R/ridge.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.null.S = rw-r--r-- -jre/languages/R/library/survival/R/pyears.R = rw-r--r-- -jre/languages/R/library/survival/R/summary.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/coxph.detail.S = rw-r--r-- -jre/languages/R/library/survival/R/print.pyears.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.wtest.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/survConcordance.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitTurnbull.S = rw-r--r-- -jre/languages/R/library/survival/R/survpenal.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/survfitCI.R = rw-r--r-- -jre/languages/R/library/survival/R/attrassign.R = rw-r--r-- -jre/languages/R/library/survival/R/ratetableold.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survfitms.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.brent.S = rw-r--r-- -jre/languages/R/library/survival/R/match.ratetable.R = rwxr-xr-x -jre/languages/R/library/survival/R/firstlib.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitcoxph.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/cipoisson.R = rw-r--r-- -jre/languages/R/library/survival/R/predict.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/lines.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survexp.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlgauss.S = rw-r--r-- -jre/languages/R/library/survival/R/print.survreg.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.S = rw-r--r-- -jre/languages/R/library/survival/R/strata.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/predict.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/yates.R = rw-r--r-- -jre/languages/R/library/survival/R/neardate.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survdiff.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/coxpenal.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/agexact.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/model.matrix.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/model.frame.survreg.R = rw-r--r-- -jre/languages/R/library/survival/R/lines.aareg.S = rw-r--r-- -jre/languages/R/library/survival/R/cox.zph.S = rw-r--r-- -jre/languages/R/library/survival/R/survfitms.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.coxph.S = rw-r--r-- -jre/languages/R/library/survival/R/survexp.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.gaussian.S = rw-r--r-- -jre/languages/R/library/survival/R/ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controlaic.S = rw-r--r-- -jre/languages/R/library/survival/R/tcut.S = rw-r--r-- -jre/languages/R/library/survival/R/dsurvreg.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/clogit.R = rw-r--r-- -jre/languages/R/library/survival/R/print.survexp.S = rw-r--r-- -jre/languages/R/library/survival/R/Surv.R = rw-r--r-- -jre/languages/R/library/survival/R/survfitKM.S = rw-r--r-- -jre/languages/R/library/survival/R/survreg.fit.S = rw-r--r-- -jre/languages/R/library/survival/R/frailty.t.S = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.survfit.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/survdiff.S = rw-r--r-- -jre/languages/R/library/survival/R/summary.ratetable.R = rw-r--r-- -jre/languages/R/library/survival/R/aeqSurv.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.coxphlist.S = rw-r--r-- -jre/languages/R/library/survival/R/finegray.R = rw-r--r-- -jre/languages/R/library/survival/R/summary.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/coxpenal.df.S = rw-r--r-- -jre/languages/R/library/survival/R/ratetableDate.R = rw-r--r-- -jre/languages/R/library/survival/R/predict.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/agreg.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/anova.survreglist.S = rw-r--r-- -jre/languages/R/library/survival/R/print.coxph.null.S = rw-r--r-- -jre/languages/R/library/survival/R/quantile.survfit.R = rw-r--r-- -jre/languages/R/library/survival/R/coxexact.fit.R = rw-r--r-- -jre/languages/R/library/survival/R/untangle.specials.S = rw-r--r-- -jre/languages/R/library/survival/R/predict.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/survConcordance.R = rw-r--r-- -jre/languages/R/library/survival/R/print.summary.coxph.penal.S = rw-r--r-- -jre/languages/R/library/survival/R/agsurv.R = rw-r--r-- -jre/languages/R/library/survival/R/frailty.controldf.S = rw-r--r-- -jre/languages/R/library/survival/R/residuals.survreg.R = rw-r--r-- -jre/languages/R/library/survival/R/survcallback.S = rw-r--r-- -jre/languages/R/library/survival/R/logLik.coxph.R = rw-r--r-- -jre/languages/R/library/survival/R/survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/survSplit.R = rw-r--r-- -jre/languages/R/library/survival/R/labels.survreg.S = rw-r--r-- -jre/languages/R/library/survival/R/survival = rw-r--r-- -jre/languages/R/library/survival/R/survregDtest.S = rw-r--r-- -jre/languages/R/library/survival/R/xtras.R = rw-r--r-- -jre/languages/R/library/survival/R/coxph.control.S = rw-r--r-- -jre/languages/R/library/survival/R/survdiff.fit.S = rw-r--r-- -jre/languages/R/library/survival/Meta/vignette.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/data.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/links.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/features.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/package.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/survival/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/survival/html/R.css = rw-r--r-- -jre/languages/R/library/survival/html/00Index.html = rw-r--r-- -jre/languages/R/library/survival/libs/survival.so = rwxr-xr-x -jre/languages/R/library/survival/doc/adjcurve.R = rw-r--r-- -jre/languages/R/library/survival/doc/adjcurve.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/adjcurve.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/index.html = rw-r--r-- -jre/languages/R/library/survival/doc/tests.R = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/multi.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/multi.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/population.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/population.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.R = rw-r--r-- -jre/languages/R/library/survival/doc/population.R = rw-r--r-- -jre/languages/R/library/survival/doc/tests.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/tests.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/compete.R = rw-r--r-- -jre/languages/R/library/survival/doc/compete.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/compete.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.R = rw-r--r-- -jre/languages/R/library/survival/doc/validate.R = rw-r--r-- -jre/languages/R/library/survival/doc/timedep.R = rw-r--r-- -jre/languages/R/library/survival/doc/validate.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/validate.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/splines.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.Rnw = rw-r--r-- -jre/languages/R/library/survival/doc/tiedtimes.pdf = rw-r--r-- -jre/languages/R/library/survival/doc/multi.R = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rds = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rdx = rw-r--r-- -jre/languages/R/library/survival/data/Rdata.rdb = rw-r--r-- -jre/languages/R/library/survival/help/survival.rdb = rw-r--r-- -jre/languages/R/library/survival/help/survival.rdx = rw-r--r-- -jre/languages/R/library/survival/help/AnIndex = rw-r--r-- -jre/languages/R/library/survival/help/aliases.rds = rw-r--r-- -jre/languages/R/library/survival/help/paths.rds = rw-r--r-- -jre/languages/R/library/grid/NAMESPACE = rw-r--r-- -jre/languages/R/library/grid/DESCRIPTION = rw-r--r-- -jre/languages/R/library/grid/INDEX = rw-r--r-- -jre/languages/R/library/grid/R/grid.rdb = rw-r--r-- -jre/languages/R/library/grid/R/grid.rdx = rw-r--r-- -jre/languages/R/library/grid/R/grid = rw-r--r-- -jre/languages/R/library/grid/Meta/links.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/features.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/nsInfo.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/package.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/hsearch.rds = rw-r--r-- -jre/languages/R/library/grid/Meta/Rd.rds = rw-r--r-- -jre/languages/R/library/grid/html/R.css = rw-r--r-- -jre/languages/R/library/grid/html/00Index.html = rw-r--r-- -jre/languages/R/library/grid/libs/grid.so = rwxr-xr-x -jre/languages/R/library/grid/doc/moveline.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/plotexample.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/saveload.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/displaylist.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/viewports.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/interactive.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/grid.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/DivByZero.txt = rw-r--r-- -jre/languages/R/library/grid/doc/rotated.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/changes.txt = rw-r--r-- -jre/languages/R/library/grid/doc/locndimn.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/frame.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/nonfinite.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/sharing.pdf = rw-r--r-- -jre/languages/R/library/grid/doc/grobs.pdf = rw-r--r-- -jre/languages/R/library/grid/help/AnIndex = rw-r--r-- -jre/languages/R/library/grid/help/aliases.rds = rw-r--r-- -jre/languages/R/library/grid/help/grid.rdb = rw-r--r-- -jre/languages/R/library/grid/help/grid.rdx = rw-r--r-- -jre/languages/R/library/grid/help/paths.rds = rw-r--r-- -jre/languages/R/etc/edMakeconf.etc.llvm = rw-r--r-- -jre/languages/R/etc/native-packages = rw-r--r-- -jre/languages/R/etc/configure.ac = rw-r--r-- -jre/languages/R/etc/Makeconf.in = rw-r--r-- -jre/languages/R/etc/ldpaths = rw-r--r-- -jre/languages/R/etc/DEFAULT_CRAN_MIRROR = rw-r--r-- -jre/languages/R/etc/configure = rwxr-xr-x -jre/languages/R/etc/ffibuildtype = rw-r--r-- -jre/languages/R/etc/repositories = rw-r--r-- -jre/languages/R/etc/Renviron.in = rw-r--r-- -jre/languages/R/etc/ldpaths.in = rw-r--r-- -jre/languages/R/etc/VERSION = rw-r--r-- -jre/languages/R/etc/Makeconf = rw-r--r-- -jre/languages/R/etc/Renviron = rw-r--r-- -jre/languages/R/etc/edMakeconf.etc = rw-r--r-- -jre/languages/R/etc/javaconf = rw-r--r-- -jre/languages/R/etc/tools/GETVERSION = rw-r--r-- -jre/languages/R/etc/tools/ldAIX4 = rw-r--r-- -jre/languages/R/etc/tools/copy-if-change = rw-r--r-- -jre/languages/R/etc/tools/install-sh = rwxr-xr-x -jre/languages/R/etc/tools/help2man.pl = rw-r--r-- -jre/languages/R/etc/tools/config.rpath = rwxr-xr-x -jre/languages/R/etc/tools/ltmain.sh = rw-r--r-- -jre/languages/R/etc/tools/link-recommended = rwxr-xr-x -jre/languages/R/etc/tools/Makefile = rw-r--r-- -jre/languages/R/etc/tools/config.guess = rwxr-xr-x -jre/languages/R/etc/tools/missing = rwxr-xr-x -jre/languages/R/etc/tools/README = rw-r--r-- -jre/languages/R/etc/tools/GETCONFIG = rw-r--r-- -jre/languages/R/etc/tools/config.sub = rwxr-xr-x -jre/languages/R/etc/tools/GETMAKEVAL = rwxr-xr-x -jre/languages/R/etc/tools/updatefat = rwxr-xr-x -jre/languages/R/etc/tools/install-info.pl = rw-r--r-- -jre/languages/R/etc/tools/move-if-change = rw-r--r-- -jre/languages/R/etc/tools/getsp.java = rw-r--r-- -jre/languages/R/etc/tools/Makefile.in = rw-r--r-- -jre/languages/R/etc/tools/rsync-recommended = rwxr-xr-x -jre/languages/R/etc/tools/GETDISTNAME = rwxr-xr-x -jre/languages/R/etc/tools/mdate-sh = rwxr-xr-x -jre/languages/R/etc/m4/ltversion.m4 = rw-r--r-- -jre/languages/R/etc/m4/libtool.m4 = rw-r--r-- -jre/languages/R/etc/m4/ltoptions.m4 = rw-r--r-- -jre/languages/R/etc/m4/cairo.m4 = rw-r--r-- -jre/languages/R/etc/m4/ltsugar.m4 = rw-r--r-- -jre/languages/R/etc/m4/Makefile = rw-r--r-- -jre/languages/R/etc/m4/stat-time.m4 = rw-r--r-- -jre/languages/R/etc/m4/README = rw-r--r-- -jre/languages/R/etc/m4/bigendian.m4 = rw-r--r-- -jre/languages/R/etc/m4/codeset.m4 = rw-r--r-- -jre/languages/R/etc/m4/gettext.m4 = rw-r--r-- -jre/languages/R/etc/m4/R.m4 = rw-r--r-- -jre/languages/R/etc/m4/cxx_11.m4 = rw-r--r-- -jre/languages/R/etc/m4/clibs.m4 = rw-r--r-- -jre/languages/R/etc/m4/gettext-lib.m4 = rw-r--r-- -jre/languages/R/etc/m4/Makefile.in = rw-r--r-- -jre/languages/R/etc/m4/lt~obsolete.m4 = rw-r--r-- -jre/languages/R/etc/m4/openmp.m4 = rw-r--r-- -jre/languages/R/etc/src/include/config.h.in = rw-r--r-- -jre/languages/R/share/encodings/character-sets = rw-r--r-- -jre/languages/R/share/encodings/Adobe-glyphlist = rw-r--r-- -jre/languages/R/share/R/tests-startup.R = rw-r--r-- -jre/languages/R/share/R/examples-header.R = rw-r--r-- -jre/languages/R/share/R/examples-footer.R = rw-r--r-- -jre/languages/R/share/R/REMOVE.R = rw-r--r-- -jre/languages/R/share/R/nspackloader.R = rw-r--r-- -jre/languages/R/share/java/README = rw-r--r-- -jre/languages/R/share/java/getsp.class = rw-r--r-- -jre/languages/R/share/make/shlib.mk = rw-r--r-- -jre/languages/R/share/make/check_vars_ini.mk = rw-r--r-- -jre/languages/R/share/make/lazycomp.mk = rw-r--r-- -jre/languages/R/share/make/winshlib.mk = rw-r--r-- -jre/languages/R/share/make/config.mk = rw-r--r-- -jre/languages/R/share/make/clean.mk = rw-r--r-- -jre/languages/R/share/make/vars.mk = rw-r--r-- -jre/languages/R/share/make/basepkg.mk = rw-r--r-- -jre/languages/R/share/make/check_vars_out.mk = rw-r--r-- -jre/languages/R/share/Rd/macros/system.Rd = rw-r--r-- -jre/languages/R/doc/COPYRIGHTS = rw-r--r-- -jre/languages/R/doc/BioC_mirrors.csv = rw-r--r-- -jre/languages/R/doc/NEWS.Rd = rw-r--r-- -jre/languages/R/doc/NEWS.pdf = rw-r--r-- -jre/languages/R/doc/R.aux = rw-r--r-- -jre/languages/R/doc/AUTHORS = rw-r--r-- -jre/languages/R/doc/Makefile = rw-r--r-- -jre/languages/R/doc/FAQ = rw-r--r-- -jre/languages/R/doc/RESOURCES = rw-r--r-- -jre/languages/R/doc/Rscript.1 = rw-r--r-- -jre/languages/R/doc/CRAN_mirrors.csv = rw-r--r-- -jre/languages/R/doc/NEWS.2 = rw-r--r-- -jre/languages/R/doc/COPYING = rw-r--r-- -jre/languages/R/doc/NEWS.rds = rw-r--r-- -jre/languages/R/doc/NEWS = rw-r--r-- -jre/languages/R/doc/NEWS.2.Rd = rw-r--r-- -jre/languages/R/doc/THANKS = rw-r--r-- -jre/languages/R/doc/KEYWORDS = rw-r--r-- -jre/languages/R/doc/Makefile.in = rw-r--r-- -jre/languages/R/doc/Makefile.win = rw-r--r-- -jre/languages/R/doc/R.1 = rw-r--r-- -jre/languages/R/doc/NEWS.0 = rw-r--r-- -jre/languages/R/doc/KEYWORDS.db = rw-r--r-- -jre/languages/R/doc/NEWS.1 = rw-r--r-- -jre/languages/R/doc/html/favicon.ico = rw-r--r-- -jre/languages/R/doc/html/index.html = rw-r--r-- -jre/languages/R/doc/html/about.html = rw-r--r-- -jre/languages/R/doc/html/up.jpg = rw-r--r-- -jre/languages/R/doc/html/Makefile = rw-r--r-- -jre/languages/R/doc/html/packages.html = rw-r--r-- -jre/languages/R/doc/html/NEWS.2.html = rw-r--r-- -jre/languages/R/doc/html/R-admin.html = rw-r--r-- -jre/languages/R/doc/html/index-default.html = rw-r--r-- -jre/languages/R/doc/html/NEWS.html = rw-r--r-- -jre/languages/R/doc/html/resources.html = rw-r--r-- -jre/languages/R/doc/html/left.jpg = rw-r--r-- -jre/languages/R/doc/html/Notes = rw-r--r-- -jre/languages/R/doc/html/logo.jpg = rw-r--r-- -jre/languages/R/doc/html/R.css = rw-r--r-- -jre/languages/R/doc/html/Rlogo.svg = rw-r--r-- -jre/languages/R/doc/html/Search.html = rw-r--r-- -jre/languages/R/doc/html/Rlogo.pdf = rw-r--r-- -jre/languages/R/doc/html/SearchOn.html = rw-r--r-- -jre/languages/R/doc/html/Makefile.in = rw-r--r-- -jre/languages/R/doc/html/right.jpg = rw-r--r-- -jre/languages/R/doc/html/packages-head-utf8.html = rw-r--r-- -jre/languages/R/doc/manual/R-exts.texi = rw-r--r-- -jre/languages/R/doc/manual/pdfcolor.tex = rw-r--r-- -jre/languages/R/doc/manual/refman.top = rw-r--r-- -jre/languages/R/doc/manual/ISBN = rw-r--r-- -jre/languages/R/doc/manual/resources.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile = rw-r--r-- -jre/languages/R/doc/manual/version.texi = rw-r--r-- -jre/languages/R/doc/manual/R-defs.texi = rw-r--r-- -jre/languages/R/doc/manual/R-exts.c = rw-r--r-- -jre/languages/R/doc/manual/rw-FAQ.texi = rw-r--r-- -jre/languages/R/doc/manual/R-FAQ.texi = rw-r--r-- -jre/languages/R/doc/manual/R-intro.R = rw-r--r-- -jre/languages/R/doc/manual/quot.sed = rw-r--r-- -jre/languages/R/doc/manual/README = rw-r--r-- -jre/languages/R/doc/manual/Rfaq.css = rw-r--r-- -jre/languages/R/doc/manual/refman.bot = rw-r--r-- -jre/languages/R/doc/manual/R-intro.texi = rw-r--r-- -jre/languages/R/doc/manual/stamp-images-html = rw-r--r-- -jre/languages/R/doc/manual/dir = rw-r--r-- -jre/languages/R/doc/manual/R-data.texi = rw-r--r-- -jre/languages/R/doc/manual/epsf.tex = rw-r--r-- -jre/languages/R/doc/manual/Rman.css = rw-r--r-- -jre/languages/R/doc/manual/R-ints.texi = rw-r--r-- -jre/languages/R/doc/manual/R-exts.R = rw-r--r-- -jre/languages/R/doc/manual/R-admin.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile.in = rw-r--r-- -jre/languages/R/doc/manual/R-lang.texi = rw-r--r-- -jre/languages/R/doc/manual/Makefile.win = rw-r--r-- -jre/languages/R/doc/manual/images/hist.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/hist.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig12.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig11.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/fig11.png = rw-r--r-- -jre/languages/R/doc/manual/images/fig12.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ecdf.png = rw-r--r-- -jre/languages/R/doc/manual/images/ice.png = rw-r--r-- -jre/languages/R/doc/manual/images/QQ.png = rw-r--r-- -jre/languages/R/doc/manual/images/QQ.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ecdf.pdf = rw-r--r-- -jre/languages/R/doc/manual/images/ice.pdf = rw-r--r-- -jre/languages/R/jline.jar = rw-r--r-- -jre/languages/R/antlr4.jar = rw-r--r-- -jre/languages/R/xz-1.8.jar = rw-r--r-- -jre/languages/R/fastr-launcher.jar = rw-r--r-- -jre/languages/R/bin/exec/R = rwxr-xr-x -jre/languages/R/bin/Rscript = rwxr-xr-x -jre/languages/R/3rd_party_licenses_fastr.txt = rw-r--r-- -jre/languages/R/native-image.properties = rw-r--r-- -jre/languages/R/README_FASTR = rw-r--r-- -jre/languages/R/LICENSE_FASTR = rw-r--r-- -LICENSE_FASTR = rwxrwxrwx -3rd_party_licenses_fastr.txt = rwxrwxrwx -bin/Rscript = rwxrwxrwx -bin/R = rwxrwxrwx -jre/languages/R/release = rw-rw-r-- -jre/bin/Rscript = rwxrwxrwx -jre/bin/R = rwxrwxrwx \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/symlinks deleted file mode 100644 index 0aeecbe46387..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/META-INF/symlinks +++ /dev/null @@ -1,3 +0,0 @@ -LICENSE_FASTR = jre/languages/R/LICENSE_FASTR -bin/R = ../jre/bin/R -jre/bin/R = ../languages/R/bin/R \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/LICENSE_FASTR b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/LICENSE_FASTR deleted file mode 100644 index 54975fbea0e8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/LICENSE_FASTR +++ /dev/null @@ -1,720 +0,0 @@ -Product License - GraalVM Community Edition 1.0 R Language Component - -This is a release of GraalVM Community Edition 1.0 R Language Component. This -particular copy of the software is released under version 3 of GNU General -Public License. - -Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved - -=========================================================================== - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - -=========================================================================== - - WRITTEN OFFER FOR SOURCE CODE -For any software that you receive from Oracle in binary form which is licensed -under an open source license that gives you the right to receive the source -code for that binary, you can obtain a copy of the applicable source code by -visiting http://www.oracle.com/goto/opensourcecode. If the source code for the -binary was not provided to you with the binary, you can also receive a copy of -the source code on physical media by submitting a written request to the -address listed below or by sending an email to Oracle using the following link: - http://www.oracle.com/goto/opensourcecode/request. - -Oracle America, Inc. -Attn: Senior Vice President -Development and Engineering Legal -500 Oracle Parkway, 10th Floor -Redwood Shores, CA 94065 - -Your request should include: - • The name of the binary for which you are requesting the source code - • The name and version number of the Oracle product containing the binary - • The date you received the Oracle product - • Your name - • Your company name (if applicable) - • Your return mailing address and email, and - • A telephone number in the event we need to reach you. - -We may charge you a fee to cover the cost of physical media and processing. -Your request must be sent - a. within three (3) years of the date you received the Oracle product that -included the binary that is the subject of your request, or - b. in the case of code licensed under the GPL v3 for as long as Oracle -offers spare parts or customer support for that product model. - -=========================================================================== diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/README_FASTR b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/README_FASTR deleted file mode 100644 index a5283f739238..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/README_FASTR +++ /dev/null @@ -1,70 +0,0 @@ -[![Join the chat at https://gitter.im/graalvm/graal-core](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/graalvm/graal-core?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) - -A high-performance implementation of the R programming language, built on GraalVM. - -FastR aims to be: -* [efficient](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#4ab6): executing R language scripts faster than any other R runtime -* [polyglot](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#0f5c): allowing [polyglot interoperability](https://www.graalvm.org/docs/reference-manual/polyglot/) with other languages in the GraalVM ecosystem. -* [compatible](https://medium.com/graalvm/faster-r-with-fastr-4b8db0e0dceb#fff5): providing support for existing packages and the R native interface -* [embeddable](https://github.com/graalvm/examples/tree/master/r_java_embedding): allowing integration using the R embedding API or the GraalVM polyglot embedding SDK - - -The screenshot below shows Java application with embedded FastR engine. -The plot below was generated by `ggplot2` running on FastR and it shows -peak performance of the [raytracing example](http://www.tylermw.com/throwing-shade/). -The measurements were [reproduced independently](https://nextjournal.com/sdanisch/fastr-benchmark). - -![Java embedding](documentation/assets/javaui.png) -![Speedup](documentation/assets/speedup.png) - - ## Getting Started -See the documentation on the GraalVM website on how to [get GraalVM](https://www.graalvm.org/docs/getting-started/) and [install and use FastR](http://www.graalvm.org/docs/reference-manual/languages/r/). - -``` -$ $GRAALVM/bin/R -Type 'q()' to quit R. -> print("Hello R!") -[1] "Hello R!" -> -``` - -## Documentation - -The reference manual for FastR, which explains its advantages, its current limitations, compatibility and additional functionality is available on the [GraalVM website](http://www.graalvm.org/docs/reference-manual/languages/r/). - -Further documentation, including contributor/developer-oriented information, is in the [documentation folder](documentation/Index.md) of this repository. - -## Current Status - -The goal of FastR is to be a drop-in replacement for GNU-R, the reference implementation of the R language. -FastR faithfully implements the R language, and any difference in behavior is considered to be a bug. - -FastR is capable of running binary R packages built for GNU-R as long as those packages properly use the R extensions C API (for best results, it is recommended to install R packages from source). -FastR supports R graphics via the grid package and packages based on grid (like lattice and ggplot2). -We are currently working towards support for the base graphics package. -FastR currently supports many of the popular R packages, such as ggplot2, jsonlite, testthat, assertthat, knitr, Shiny, Rcpp, rJava, quantmod and more… - -Moreover, support for dplyr and data.table are on the way. -We are actively monitoring and improving FastR support for the most popular packages published on CRAN including all the tidyverse packages. -However, one should take into account the experimental state of FastR, there can be packages that are not compatible yet, and if you try it on a complex R application, it can stumble on those. - -## Stay connected with the community - -See [graalvm.org/community](https://www.graalvm.org/community/) on how to stay connected with the development community. -The discussion on [gitter](https://gitter.im/graalvm/graal-core) is a good way to get in touch with us. - -We would like to grow the FastR open-source community to provide a free R implementation atop the Truffle/Graal stack. -We encourage contributions, and invite interested developers to join in. -Prospective contributors need to sign the [Oracle Contributor Agreement (OCA)](http://www.oracle.com/technetwork/community/oca-486395.html). -The access point for contributions, issues and questions about FastR is the [GitHub repository](https://github.com/oracle/fastr). - -## Authors - -FastR is developed by Oracle Labs and is based on [the GNU-R runtime](http://www.r-project.org/). -It contains contributions by researchers at Purdue University ([purdue-fastr](https://github.com/allr/purdue-fastr)), Northeastern University, JKU Linz, TU Dortmund and TU Berlin. - -## License - -FastR is available under a GPLv3 license. - - diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/doc/THANKS b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/doc/THANKS deleted file mode 100644 index 6f8eb3ee226a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/doc/THANKS +++ /dev/null @@ -1,70 +0,0 @@ -R would not be what it is today without the invaluable help of these -people outside of the R core team, who contributed by donating code, bug -fixes and documentation: - -Valerio Aimale, Suharto Anggono, Thomas Baier, Henrik Bengtsson, Roger Bivand, -Ben Bolker, David Brahm, G"oran Brostr"om, Patrick Burns, Vince Carey, -Saikat DebRoy, Matt Dowle, Brian D'Urso, Lyndon Drake, Dirk Eddelbuettel, -Claus Ekstrom, Sebastian Fischmeister, John Fox, Paul Gilbert, -Yu Gong, Gabor Grothendieck, Frank E Harrell Jr, Peter M. Haverty, -Torsten Hothorn, Robert King, Kjetil Kjernsmo, Roger Koenker, Philippe Lambert, -Jan de Leeuw, Jim Lindsey, Patrick Lindsey, Catherine Loader, -Gordon Maclean, John Maindonald, David Meyer, Ei-ji Nakama, -Jens Oehlschaegel, Steve Oncley, Richard O'Keefe, Hubert Palme, -Roger D. Peng, Jose' C. Pinheiro, Tony Plate, Anthony Rossini, -Jonathan Rougier, Petr Savicky, Guenther Sawitzki, Marc Schwartz, -Arun Srinivasan, Detlef Steuer, Bill Simpson, Gordon Smyth, Adrian Trapletti, -Terry Therneau, Rolf Turner, Bill Venables, Gregory R. Warnes, -Andreas Weingessel, Morten Welinder, James Wettenhall, Simon Wood, and -Achim Zeileis. - -Others have written code that has been adopted by R and is -acknowledged in the code files, including - -J. D. Beasley, David J. Best, Richard Brent, Kevin Buhr, Michael -A. Covington, Bill Cleveland, Robert Cleveland,, G. W. Cran, -C. G. Ding, Ulrich Drepper, Paul Eggert, J. O. Evans, David M. Gay, -H. Frick, G. W. Hill, Richard H. Jones, Eric Grosse, Shelby Haberman, -Bruno Haible, John Hartigan, Andrew Harvey, Trevor Hastie, Min Long -Lam, George Marsaglia, K. J. Martin, Gordon Matzigkeit, -C. R. Mckenzie, Jean McRae, Cyrus Mehta, Fionn Murtagh, John C. Nash, -Finbarr O'Sullivan, R. E. Odeh, William Patefield, Nitin Patel, Alan -Richardson, D. E. Roberts, Patrick Royston, Russell Lenth, Ming-Jen -Shyu, Richard C. Singleton, S. G. Springer, Supoj Sutanthavibul, Irma -Terpenning, G. E. Thomas, Rob Tibshirani, Wai Wan Tsang, Berwin -Turlach, Gary V. Vaughan, Michael Wichura, Jingbo Wang, M. A. Wong, -and the Free Software Foundation (for autoconf code and utilities). -See also files under src/extras. - -Many more, too numerous to mention here, have contributed by sending bug -reports and suggesting various improvements. - -Simon Davies whilst at the University of Auckland wrote the original -version of glm(). - -Julian Harris and Wing Kwong (Tiki) Wan whilst at the University of -Auckland assisted Ross Ihaka with the original Macintosh port. - -R was inspired by the S environment which has been principally -developed by John Chambers, with substantial input from Douglas Bates, -Rick Becker, Bill Cleveland, Trevor Hastie, Daryl Pregibon and -Allan Wilks. - -A special debt is owed to John Chambers who has graciously contributed -advice and encouragement in the early days of R and later became a -member of the core team. - - - -The R Foundation may decide to give out @R-project.org -email addresses to contributors to the R Project (even without making them -members of the R Foundation) when in the view of the R Foundation this -would help advance the R project. - -The R Core Group, Roger Bivand, Jennifer Bryan, Di Cook, Dirk Eddelbuettel, -John Fox, Bettina Grün, Frank Harrell, Torsten Hothorn, Stefano Iacus, -Julie Josse, Balasubramanian Narasimhan, Marc Schwartz, Heather Turner, -Bill Venables, Hadley Wickham and Achim Zeileis are the ordinary members of -the R Foundation. -In addition, David Meyer and Simon Wood are also e-addressable by -.@R-project.org. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/include/linked b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/include/linked deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/library/utils/DESCRIPTION b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/library/utils/DESCRIPTION deleted file mode 100644 index e8a417ec3fe6..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/library/utils/DESCRIPTION +++ /dev/null @@ -1,11 +0,0 @@ -Package: utils -Version: 3.5.1 -Priority: base -Title: The R Utils Package -Author: R Core Team and contributors worldwide -Maintainer: R Core Team -Description: R utility functions. -License: Part of R 3.5.1 -Suggests: methods, xml2, commonmark -NeedsCompilation: yes -Built: R 3.5.1; x86_64-apple-darwin18.2.0; 2019-04-02 04:04:54 UTC; unix diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/native-image.properties deleted file mode 100644 index 0b896fe5ce53..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/native-image.properties +++ /dev/null @@ -1,28 +0,0 @@ -# This file contains native-image arguments needed to fastr -# - -ImageName = RMain - -Requires = tool:nfi \ - tool:chromeinspector \ - tool:nfi \ - tool:profiler - -JavaArgs = \ - -Dfastr.resource.factory.class=com.oracle.truffle.r.nodes.builtin.EagerResourceHandlerFactory \ - -Dfastr.internal.usemxbeans=false \ - -Dfastr.internal.usenativeeventloop=false \ - -Dfastr.internal.defaultdownloadmethod=wget \ - -Dfastr.internal.ignorejvmargs=true \ - -Dfastr.use.remote.grid.awt.device=true - -LauncherClass = com.oracle.truffle.r.launcher.RMain -LauncherClassPath = lib/graalvm/launcher-common.jar:languages/R/fastr-launcher.jar - -Args = --enable-http \ - -H:MaxRuntimeCompileMethods=8000 \ - -H:+UnlockExperimentalVMOptions \ - -H:-TruffleCheckFrameImplementation \ - -H:+TruffleCheckNeverPartOfCompilation \ - -H:-UseServiceLoaderFeature \ - -H:-UnlockExperimentalVMOptions diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/release deleted file mode 100644 index eb822705c23a..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=macos -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/share/java/README b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/share/java/README deleted file mode 100644 index 6201c0580eb8..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/r/1.1.0.0/jre/languages/R/share/java/README +++ /dev/null @@ -1,3 +0,0 @@ -getsp.class has source tools/getsp.java. - -It is installed for use by R CMD javareconf. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/MANIFEST.MF deleted file mode 100644 index 362a1f7feb04..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Bundle-Name: TruffleRuby -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Version: 1.0.1.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.0.1.0 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/ruby -x-GraalVM-Message-PostInst: \nIMPORTANT NOTE:\n---------------\nThe Ruby - openssl C extension needs to be recompiled on your system to work with - the installed libssl.\nFirst, make sure TruffleRuby's dependencies are i - nstalled, which are described at:\n https://github.com/oracle/truffleru - by/blob/master/README.md#dependencies\nThen run the following command:\n - ${graalvm_home}/jre/languages/ruby/lib/truffle/post_install_hook - .sh diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/permissions deleted file mode 100644 index bb398974f8a7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/permissions +++ /dev/null @@ -1,7 +0,0 @@ -bin/truffleruby = rwxrwxrwx -bin/rake = rwxrwxrwx -jre/bin/truffleruby = rwxrwxrwx -jre/bin/rake = rwxrwxrwx -LICENSE_TRUFFLERUBY.md = rwxrwxrwx -jre/languages/ruby/release = rw-rw-r-- -jre/languages/ruby/lib/cext/include/sulong/polyglot.h = rw-rw-r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/symlinks deleted file mode 100644 index fa711df113bd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/META-INF/symlinks +++ /dev/null @@ -1,6 +0,0 @@ -bin/ruby = ../jre/bin/ruby -bin/rake = ../jre/bin/rake -jre/bin/truffleruby = ../languages/ruby/bin/truffleruby -jre/bin/rake = ../languages/ruby/bin/rake -LICENSE_TRUFFLERUBY.md = jre/languages/ruby/LICENSE_TRUFFLERUBY.md -jre/languages/ruby/bin/ruby = truffleruby \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md deleted file mode 100644 index 8e3aea7e3802..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md +++ /dev/null @@ -1 +0,0 @@ -Some license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/README.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/README.md deleted file mode 100644 index e23317b39c52..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/README.md +++ /dev/null @@ -1,218 +0,0 @@ -![TruffleRuby logo](logo/png/truffleruby_logo_horizontal_medium.png) - -A high performance implementation of the Ruby programming language. Built on -[GraalVM](http://graalvm.org/) by [Oracle Labs](https://labs.oracle.com). - -## Getting started - -There are three ways to install TruffleRuby: - -* Via [GraalVM](doc/user/installing-graalvm.md), which includes support for - other languages such as JavaScript, R and Python and supports both the - [*native* and *JVM* configurations](#truffleruby-configurations). - Inside GraalVM will then be a `bin/ruby` command that runs TruffleRuby. - We recommend that you use a [Ruby manager](doc/user/ruby-managers.md#configuring-ruby-managers-for-the-full-graalvm-distribution) - to use TruffleRuby inside GraalVM. - -* Via your [Ruby manager/installer](doc/user/ruby-managers.md) (RVM, rbenv, - chruby, ruby-build, ruby-install). This contains only TruffleRuby, in the - [*native* configuration](#truffleruby-configurations), making it a smaller - download. It is meant for users just wanting a Ruby implementation and already - using a Ruby manager. - -* Using the [standalone distribution](doc/user/standalone-distribution.md) - as a simple binary tarball. This distribution is also useful for - [testing TruffleRuby in CI](doc/user/standalone-distribution.md). - On [TravisCI](https://docs.travis-ci.com/user/languages/ruby#truffleruby), you can simply use: - ```yaml - language: ruby - rvm: - - truffleruby - ``` - -You can use `gem` to install Gems as normal. - -You can also build TruffleRuby from source, see the -[building instructions](doc/contributor/workflow.md), and using -[Docker](doc/contributor/docker.md). - -Please report any issue you might find on [GitHub](https://github.com/oracle/truffleruby/issues). - -## Aim - -TruffleRuby aims to: - -* Run idiomatic Ruby code faster -* Run Ruby code in parallel -* Boot Ruby applications in less time -* Execute C extensions in a managed environment -* Add fast and low-overhead interoperability with languages like Java, JavaScript, Python and R -* Provide new tooling such as debuggers and monitoring -* All while maintaining very high compatibility with the standard implementation of Ruby - -## TruffleRuby configurations - -There are two main configurations of TruffleRuby: *native* and *JVM*. It's -important to understand the different configurations of TruffleRuby, as each has -different capabilities and performance characteristics. You should pick the -execution mode that is appropriate for your application. - -TruffleRuby by default runs in the *native* -configuration. In this configuration, TruffleRuby is ahead-of-time compiled to a -standalone native executable. This means that you don't need a JVM installed on -your system to use it. The advantage of the native configuration is that it -[starts about as fast as MRI](doc/contributor/svm.md), it may use less memory, -and it becomes fast in less time. The disadvantage of the native configuration -is that you can't use Java tools like VisualVM, you can't use Java -interoperability, and *peak performance may be lower than on the JVM*. The -native configuration is used by default, but you can also request it using -`--native`. To use polyglot programming with the *native* configuration, you -need to use the `--polyglot` flag. To check you are using the *native* -configuration, `ruby --version` should mention `Native`. - -TruffleRuby can also be used in the *JVM* configuration, where it runs as a -normal Java application on the JVM, as any other Java application would. The -advantage of the JVM configuration is that you can use Java interoperability, -and *peak performance may be higher than the native configuration*. The -disadvantage of the JVM configuration is that it takes much longer to start and -to get fast, and may use more memory. The JVM configuration is requested using -`--jvm`. To check you are using the *JVM* configuration, `ruby --version` should -not mention `Native`. - -If you are running a short-running program you probably want the default, -*native*, configuration. If you are running a long-running program and want the -highest possible performance you probably want the *JVM* configuration, by using -`--jvm`. - -At runtime you can tell if you are using the native configuration using -`TruffleRuby.native?`. - -You won't encounter it when using TruffleRuby from the GraalVM, but there is -also another configuration which is TruffleRuby running on the JVM but with the -Graal compiler not available. This configuration will have much lower -performance and should normally only be used for development. `ruby --version` -will mention `Interpreter` for this configuration. - -## System compatibility - -TruffleRuby is actively tested on these systems: - -* Oracle Linux 7 -* Ubuntu 18.04 LTS -* Ubuntu 16.04 LTS -* Fedora 28 -* macOS 10.14 (Mojave) -* macOS 10.13 (High Sierra) - -You may find that TruffleRuby will not work if you severely restrict the -environment, for example by unmounting system filesystems such as `/dev/shm`. - -## Dependencies - -* [LLVM](doc/user/installing-llvm.md) to build and run C extensions -* [libssl](doc/user/installing-libssl.md) for the `openssl` C extension -* [zlib](doc/user/installing-zlib.md) for the `zlib` C extension - -Without these dependencies, many libraries including RubyGems will not work. -TruffleRuby will try to print a nice error message if a dependency is missing, -but this can only be done on a best effort basis. - -You may also need to set up a [UTF-8 locale](doc/user/utf8-locale.md). - -## Current status - -We recommend that people trying TruffleRuby on their gems and applications -[get in touch with us](#contact) for help. - -TruffleRuby is progressing fast but is currently probably not ready for you to -try running your full Ruby application on. However it is ready for -experimentation and curious end-users to try on their gems and smaller -applications. - -TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it -is missing support for Nokogiri and ActiveRecord database drivers which makes it -not practical to run real Rails applications at the moment. - -You will find that many C extensions will not work without modification. - -## Migration from MRI - -TruffleRuby should in most cases work as a drop-in replacement for MRI, but you -should read about our [compatibility](doc/user/compatibility.md). - -## Migration from JRuby - -For many use cases TruffleRuby should work as a drop-in replacement for JRuby. -However, our approach to integration with Java is different to JRuby so you -should read our [migration guide](doc/user/jruby-migration.md). - -## Documentation - -Extensive documentation is available in [`doc`](doc). -[`doc/user`](doc/user) documents how to use TruffleRuby and -[`doc/contributor`](doc/contributor) documents how to develop TruffleRuby. - -## Contact - -The best way to get in touch with us is to join us in -https://gitter.im/graalvm/truffleruby, but you can also Tweet to -[@TruffleRuby](https://twitter.com/truffleruby), or email -chris.seaton@oracle.com. - -## Mailing list - -Announcements about GraalVM, including TruffleRuby, are made on the -[graal-dev](http://mail.openjdk.java.net/mailman/listinfo/graal-dev) mailing list. - -## Authors - -The main authors of TruffleRuby in order of joining the project are: - -* Chris Seaton -* Benoit Daloze -* Kevin Menard -* Petr Chalupa -* Brandon Fish -* Duncan MacGregor -* Christian Wirth - -Additionally: - -* Thomas Würthinger -* Matthias Grimmer -* Josef Haider -* Fabio Niephaus -* Matthias Springer -* Lucas Allan Amorim -* Aditya Bhardwaj - -Collaborations with: - -* [Institut für Systemsoftware at Johannes Kepler University - Linz](http://ssw.jku.at) - -And others. - -## Security - -See the [security documentation](doc/user/security.md). - -## Licence - -TruffleRuby is copyright (c) 2013-2019 Oracle and/or its affiliates, and is made -available to you under the terms of any one of the following three licenses: - -* Eclipse Public License version 1.0, or -* GNU General Public License version 2, or -* GNU Lesser General Public License version 2.1. - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. - -## Attribution - -TruffleRuby is a fork of [JRuby](https://github.com/jruby/jruby), combining it -with code from the [Rubinius](https://github.com/rubinius/rubinius) project, and -also containing code from the standard implementation of Ruby, -[MRI](https://github.com/ruby/ruby). diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt deleted file mode 100644 index f06056fb45fb..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt +++ /dev/null @@ -1,56 +0,0 @@ -Ruby is copyrighted free software by Yukihiro Matsumoto . -You can redistribute it and/or modify it under either the terms of the -2-clause BSDL (see the file BSDL), or the conditions below: - - 1. You may make and give away verbatim copies of the source form of the - software without restriction, provided that you duplicate all of the - original copyright notices and associated disclaimers. - - 2. You may modify your copy of the software in any way, provided that - you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said - modifications to Usenet or an equivalent medium, or by allowing - the author to include your modifications in the software. - - b) use the modified software only within your corporation or - organization. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 3. You may distribute the software in object code or binary form, - provided that you do at least ONE of the following: - - a) distribute the binaries and library files of the software, - together with instructions (in the manual page or equivalent) - on where to get the original distribution. - - b) accompany the distribution with the machine-readable source of - the software. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 4. You may modify and include the part of the software into any other - software (possibly commercial). But some files in the distribution - are not written by the author, so that they are not under these terms. - - For the list of those files and their copying conditions, see the - file LEGAL. - - 5. The scripts and library files supplied as input to or produced as - output from the software do not automatically fall under the - copyright of the software, but belong to whomever generated them, - and may be sold commercially, and may be aggregated with this - software. - - 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/doc/doc/user/netbeans.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/doc/doc/user/netbeans.md deleted file mode 100644 index 0e9236814854..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/doc/doc/user/netbeans.md +++ /dev/null @@ -1,29 +0,0 @@ -# NetBeans integration - -You can debug Ruby programs running in TruffleRuby using the NetBeans IDE. - -## Setup - -* Install NetBeans 8.2 -* Via Tools, Plugins, install 'Truffle Debugging Support' -* [Install TruffleRuby](installing-graalvm.md) - -We then need a project to debug. An example project that works well and -demonstrates features is available on GitHub: - -``` -$ git clone https://github.com/jtulach/sieve.git -``` - -Open `ruby+js/fromjava` as a NetBeans project. - -* Right click on the project -* Open Properties, Build, Compile, Java Platform -* Manage Java Platforms, Add Platform, and select the GraalVM directory -* Now we can set a breakpoint in Ruby by opening `sieve.rb` and clicking on the - line in `Natural#next` -* Finally, 'Debug Project' - -You will be able to debug the Ruby program as normal, and if you look at the -call stack you'll see that there are also Java and JavaScript frames that you -can debug as well, all inside the same virtual machine and debugger. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/native-image.properties deleted file mode 100644 index 69c2e64ac39f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/native-image.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file contains native-image arguments needed to build truffleruby -# - -ImageName = truffleruby - -Requires = tool:truffle tool:nfi - -LauncherClass = org.truffleruby.launcher.RubyLauncher -LauncherClassPath = languages/ruby/truffleruby-annotations.jar:languages/ruby/truffleruby-shared.jar:lib/graalvm/launcher-common.jar:lib/graalvm/truffleruby-launcher.jar - -Args = -H:MaxRuntimeCompileMethods=5400 \ - -H:+AddAllCharsets - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=ruby \ - -Dorg.graalvm.launcher.relative.llvm.home=../lib/cext/sulong-libs diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.0/jre/languages/ruby/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/MANIFEST.MF deleted file mode 100644 index f6716c2694e4..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Bundle-Name: TruffleRuby -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Version: 1.0.1.1 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.0.1.1 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/ruby -x-GraalVM-Message-PostInst: \nIMPORTANT NOTE:\n---------------\nThe Ruby - openssl C extension needs to be recompiled on your system to work with - the installed libssl.\nFirst, make sure TruffleRuby's dependencies are i - nstalled, which are described at:\n https://github.com/oracle/truffleru - by/blob/master/README.md#dependencies\nThen run the following command:\n - ${graalvm_home}/jre/languages/ruby/lib/truffle/post_install_hook - .sh diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/permissions deleted file mode 100644 index bb398974f8a7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/permissions +++ /dev/null @@ -1,7 +0,0 @@ -bin/truffleruby = rwxrwxrwx -bin/rake = rwxrwxrwx -jre/bin/truffleruby = rwxrwxrwx -jre/bin/rake = rwxrwxrwx -LICENSE_TRUFFLERUBY.md = rwxrwxrwx -jre/languages/ruby/release = rw-rw-r-- -jre/languages/ruby/lib/cext/include/sulong/polyglot.h = rw-rw-r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/symlinks deleted file mode 100644 index fa711df113bd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/META-INF/symlinks +++ /dev/null @@ -1,6 +0,0 @@ -bin/ruby = ../jre/bin/ruby -bin/rake = ../jre/bin/rake -jre/bin/truffleruby = ../languages/ruby/bin/truffleruby -jre/bin/rake = ../languages/ruby/bin/rake -LICENSE_TRUFFLERUBY.md = jre/languages/ruby/LICENSE_TRUFFLERUBY.md -jre/languages/ruby/bin/ruby = truffleruby \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/LICENSE_TRUFFLERUBY.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/LICENSE_TRUFFLERUBY.md deleted file mode 100644 index 8e3aea7e3802..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/LICENSE_TRUFFLERUBY.md +++ /dev/null @@ -1 +0,0 @@ -Some license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/README.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/README.md deleted file mode 100644 index e23317b39c52..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/README.md +++ /dev/null @@ -1,218 +0,0 @@ -![TruffleRuby logo](logo/png/truffleruby_logo_horizontal_medium.png) - -A high performance implementation of the Ruby programming language. Built on -[GraalVM](http://graalvm.org/) by [Oracle Labs](https://labs.oracle.com). - -## Getting started - -There are three ways to install TruffleRuby: - -* Via [GraalVM](doc/user/installing-graalvm.md), which includes support for - other languages such as JavaScript, R and Python and supports both the - [*native* and *JVM* configurations](#truffleruby-configurations). - Inside GraalVM will then be a `bin/ruby` command that runs TruffleRuby. - We recommend that you use a [Ruby manager](doc/user/ruby-managers.md#configuring-ruby-managers-for-the-full-graalvm-distribution) - to use TruffleRuby inside GraalVM. - -* Via your [Ruby manager/installer](doc/user/ruby-managers.md) (RVM, rbenv, - chruby, ruby-build, ruby-install). This contains only TruffleRuby, in the - [*native* configuration](#truffleruby-configurations), making it a smaller - download. It is meant for users just wanting a Ruby implementation and already - using a Ruby manager. - -* Using the [standalone distribution](doc/user/standalone-distribution.md) - as a simple binary tarball. This distribution is also useful for - [testing TruffleRuby in CI](doc/user/standalone-distribution.md). - On [TravisCI](https://docs.travis-ci.com/user/languages/ruby#truffleruby), you can simply use: - ```yaml - language: ruby - rvm: - - truffleruby - ``` - -You can use `gem` to install Gems as normal. - -You can also build TruffleRuby from source, see the -[building instructions](doc/contributor/workflow.md), and using -[Docker](doc/contributor/docker.md). - -Please report any issue you might find on [GitHub](https://github.com/oracle/truffleruby/issues). - -## Aim - -TruffleRuby aims to: - -* Run idiomatic Ruby code faster -* Run Ruby code in parallel -* Boot Ruby applications in less time -* Execute C extensions in a managed environment -* Add fast and low-overhead interoperability with languages like Java, JavaScript, Python and R -* Provide new tooling such as debuggers and monitoring -* All while maintaining very high compatibility with the standard implementation of Ruby - -## TruffleRuby configurations - -There are two main configurations of TruffleRuby: *native* and *JVM*. It's -important to understand the different configurations of TruffleRuby, as each has -different capabilities and performance characteristics. You should pick the -execution mode that is appropriate for your application. - -TruffleRuby by default runs in the *native* -configuration. In this configuration, TruffleRuby is ahead-of-time compiled to a -standalone native executable. This means that you don't need a JVM installed on -your system to use it. The advantage of the native configuration is that it -[starts about as fast as MRI](doc/contributor/svm.md), it may use less memory, -and it becomes fast in less time. The disadvantage of the native configuration -is that you can't use Java tools like VisualVM, you can't use Java -interoperability, and *peak performance may be lower than on the JVM*. The -native configuration is used by default, but you can also request it using -`--native`. To use polyglot programming with the *native* configuration, you -need to use the `--polyglot` flag. To check you are using the *native* -configuration, `ruby --version` should mention `Native`. - -TruffleRuby can also be used in the *JVM* configuration, where it runs as a -normal Java application on the JVM, as any other Java application would. The -advantage of the JVM configuration is that you can use Java interoperability, -and *peak performance may be higher than the native configuration*. The -disadvantage of the JVM configuration is that it takes much longer to start and -to get fast, and may use more memory. The JVM configuration is requested using -`--jvm`. To check you are using the *JVM* configuration, `ruby --version` should -not mention `Native`. - -If you are running a short-running program you probably want the default, -*native*, configuration. If you are running a long-running program and want the -highest possible performance you probably want the *JVM* configuration, by using -`--jvm`. - -At runtime you can tell if you are using the native configuration using -`TruffleRuby.native?`. - -You won't encounter it when using TruffleRuby from the GraalVM, but there is -also another configuration which is TruffleRuby running on the JVM but with the -Graal compiler not available. This configuration will have much lower -performance and should normally only be used for development. `ruby --version` -will mention `Interpreter` for this configuration. - -## System compatibility - -TruffleRuby is actively tested on these systems: - -* Oracle Linux 7 -* Ubuntu 18.04 LTS -* Ubuntu 16.04 LTS -* Fedora 28 -* macOS 10.14 (Mojave) -* macOS 10.13 (High Sierra) - -You may find that TruffleRuby will not work if you severely restrict the -environment, for example by unmounting system filesystems such as `/dev/shm`. - -## Dependencies - -* [LLVM](doc/user/installing-llvm.md) to build and run C extensions -* [libssl](doc/user/installing-libssl.md) for the `openssl` C extension -* [zlib](doc/user/installing-zlib.md) for the `zlib` C extension - -Without these dependencies, many libraries including RubyGems will not work. -TruffleRuby will try to print a nice error message if a dependency is missing, -but this can only be done on a best effort basis. - -You may also need to set up a [UTF-8 locale](doc/user/utf8-locale.md). - -## Current status - -We recommend that people trying TruffleRuby on their gems and applications -[get in touch with us](#contact) for help. - -TruffleRuby is progressing fast but is currently probably not ready for you to -try running your full Ruby application on. However it is ready for -experimentation and curious end-users to try on their gems and smaller -applications. - -TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it -is missing support for Nokogiri and ActiveRecord database drivers which makes it -not practical to run real Rails applications at the moment. - -You will find that many C extensions will not work without modification. - -## Migration from MRI - -TruffleRuby should in most cases work as a drop-in replacement for MRI, but you -should read about our [compatibility](doc/user/compatibility.md). - -## Migration from JRuby - -For many use cases TruffleRuby should work as a drop-in replacement for JRuby. -However, our approach to integration with Java is different to JRuby so you -should read our [migration guide](doc/user/jruby-migration.md). - -## Documentation - -Extensive documentation is available in [`doc`](doc). -[`doc/user`](doc/user) documents how to use TruffleRuby and -[`doc/contributor`](doc/contributor) documents how to develop TruffleRuby. - -## Contact - -The best way to get in touch with us is to join us in -https://gitter.im/graalvm/truffleruby, but you can also Tweet to -[@TruffleRuby](https://twitter.com/truffleruby), or email -chris.seaton@oracle.com. - -## Mailing list - -Announcements about GraalVM, including TruffleRuby, are made on the -[graal-dev](http://mail.openjdk.java.net/mailman/listinfo/graal-dev) mailing list. - -## Authors - -The main authors of TruffleRuby in order of joining the project are: - -* Chris Seaton -* Benoit Daloze -* Kevin Menard -* Petr Chalupa -* Brandon Fish -* Duncan MacGregor -* Christian Wirth - -Additionally: - -* Thomas Würthinger -* Matthias Grimmer -* Josef Haider -* Fabio Niephaus -* Matthias Springer -* Lucas Allan Amorim -* Aditya Bhardwaj - -Collaborations with: - -* [Institut für Systemsoftware at Johannes Kepler University - Linz](http://ssw.jku.at) - -And others. - -## Security - -See the [security documentation](doc/user/security.md). - -## Licence - -TruffleRuby is copyright (c) 2013-2019 Oracle and/or its affiliates, and is made -available to you under the terms of any one of the following three licenses: - -* Eclipse Public License version 1.0, or -* GNU General Public License version 2, or -* GNU Lesser General Public License version 2.1. - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. - -## Attribution - -TruffleRuby is a fork of [JRuby](https://github.com/jruby/jruby), combining it -with code from the [Rubinius](https://github.com/rubinius/rubinius) project, and -also containing code from the standard implementation of Ruby, -[MRI](https://github.com/ruby/ruby). diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/doc/doc/legal/ruby-licence.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/doc/doc/legal/ruby-licence.txt deleted file mode 100644 index f06056fb45fb..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/doc/doc/legal/ruby-licence.txt +++ /dev/null @@ -1,56 +0,0 @@ -Ruby is copyrighted free software by Yukihiro Matsumoto . -You can redistribute it and/or modify it under either the terms of the -2-clause BSDL (see the file BSDL), or the conditions below: - - 1. You may make and give away verbatim copies of the source form of the - software without restriction, provided that you duplicate all of the - original copyright notices and associated disclaimers. - - 2. You may modify your copy of the software in any way, provided that - you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said - modifications to Usenet or an equivalent medium, or by allowing - the author to include your modifications in the software. - - b) use the modified software only within your corporation or - organization. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 3. You may distribute the software in object code or binary form, - provided that you do at least ONE of the following: - - a) distribute the binaries and library files of the software, - together with instructions (in the manual page or equivalent) - on where to get the original distribution. - - b) accompany the distribution with the machine-readable source of - the software. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 4. You may modify and include the part of the software into any other - software (possibly commercial). But some files in the distribution - are not written by the author, so that they are not under these terms. - - For the list of those files and their copying conditions, see the - file LEGAL. - - 5. The scripts and library files supplied as input to or produced as - output from the software do not automatically fall under the - copyright of the software, but belong to whomever generated them, - and may be sold commercially, and may be aggregated with this - software. - - 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/doc/doc/user/netbeans.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/doc/doc/user/netbeans.md deleted file mode 100644 index 0e9236814854..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/doc/doc/user/netbeans.md +++ /dev/null @@ -1,29 +0,0 @@ -# NetBeans integration - -You can debug Ruby programs running in TruffleRuby using the NetBeans IDE. - -## Setup - -* Install NetBeans 8.2 -* Via Tools, Plugins, install 'Truffle Debugging Support' -* [Install TruffleRuby](installing-graalvm.md) - -We then need a project to debug. An example project that works well and -demonstrates features is available on GitHub: - -``` -$ git clone https://github.com/jtulach/sieve.git -``` - -Open `ruby+js/fromjava` as a NetBeans project. - -* Right click on the project -* Open Properties, Build, Compile, Java Platform -* Manage Java Platforms, Add Platform, and select the GraalVM directory -* Now we can set a breakpoint in Ruby by opening `sieve.rb` and clicking on the - line in `Natural#next` -* Finally, 'Debug Project' - -You will be able to debug the Ruby program as normal, and if you look at the -call stack you'll see that there are also Java and JavaScript frames that you -can debug as well, all inside the same virtual machine and debugger. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/native-image.properties deleted file mode 100644 index 69c2e64ac39f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/native-image.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file contains native-image arguments needed to build truffleruby -# - -ImageName = truffleruby - -Requires = tool:truffle tool:nfi - -LauncherClass = org.truffleruby.launcher.RubyLauncher -LauncherClassPath = languages/ruby/truffleruby-annotations.jar:languages/ruby/truffleruby-shared.jar:lib/graalvm/launcher-common.jar:lib/graalvm/truffleruby-launcher.jar - -Args = -H:MaxRuntimeCompileMethods=5400 \ - -H:+AddAllCharsets - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=ruby \ - -Dorg.graalvm.launcher.relative.llvm.home=../lib/cext/sulong-libs diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.0.1.1/jre/languages/ruby/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/MANIFEST.MF deleted file mode 100644 index 44e6deadaa13..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Bundle-Name: TruffleRuby -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Version: 1.1.0.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.1.0.0 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/ruby -x-GraalVM-Message-PostInst: \nIMPORTANT NOTE:\n---------------\nThe Ruby - openssl C extension needs to be recompiled on your system to work with - the installed libssl.\nFirst, make sure TruffleRuby's dependencies are i - nstalled, which are described at:\n https://github.com/oracle/truffleru - by/blob/master/README.md#dependencies\nThen run the following command:\n - ${graalvm_home}/jre/languages/ruby/lib/truffle/post_install_hook - .sh diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/permissions deleted file mode 100644 index bb398974f8a7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/permissions +++ /dev/null @@ -1,7 +0,0 @@ -bin/truffleruby = rwxrwxrwx -bin/rake = rwxrwxrwx -jre/bin/truffleruby = rwxrwxrwx -jre/bin/rake = rwxrwxrwx -LICENSE_TRUFFLERUBY.md = rwxrwxrwx -jre/languages/ruby/release = rw-rw-r-- -jre/languages/ruby/lib/cext/include/sulong/polyglot.h = rw-rw-r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/symlinks deleted file mode 100644 index fa711df113bd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/META-INF/symlinks +++ /dev/null @@ -1,6 +0,0 @@ -bin/ruby = ../jre/bin/ruby -bin/rake = ../jre/bin/rake -jre/bin/truffleruby = ../languages/ruby/bin/truffleruby -jre/bin/rake = ../languages/ruby/bin/rake -LICENSE_TRUFFLERUBY.md = jre/languages/ruby/LICENSE_TRUFFLERUBY.md -jre/languages/ruby/bin/ruby = truffleruby \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md deleted file mode 100644 index 8e3aea7e3802..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md +++ /dev/null @@ -1 +0,0 @@ -Some license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/README.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/README.md deleted file mode 100644 index e23317b39c52..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/README.md +++ /dev/null @@ -1,218 +0,0 @@ -![TruffleRuby logo](logo/png/truffleruby_logo_horizontal_medium.png) - -A high performance implementation of the Ruby programming language. Built on -[GraalVM](http://graalvm.org/) by [Oracle Labs](https://labs.oracle.com). - -## Getting started - -There are three ways to install TruffleRuby: - -* Via [GraalVM](doc/user/installing-graalvm.md), which includes support for - other languages such as JavaScript, R and Python and supports both the - [*native* and *JVM* configurations](#truffleruby-configurations). - Inside GraalVM will then be a `bin/ruby` command that runs TruffleRuby. - We recommend that you use a [Ruby manager](doc/user/ruby-managers.md#configuring-ruby-managers-for-the-full-graalvm-distribution) - to use TruffleRuby inside GraalVM. - -* Via your [Ruby manager/installer](doc/user/ruby-managers.md) (RVM, rbenv, - chruby, ruby-build, ruby-install). This contains only TruffleRuby, in the - [*native* configuration](#truffleruby-configurations), making it a smaller - download. It is meant for users just wanting a Ruby implementation and already - using a Ruby manager. - -* Using the [standalone distribution](doc/user/standalone-distribution.md) - as a simple binary tarball. This distribution is also useful for - [testing TruffleRuby in CI](doc/user/standalone-distribution.md). - On [TravisCI](https://docs.travis-ci.com/user/languages/ruby#truffleruby), you can simply use: - ```yaml - language: ruby - rvm: - - truffleruby - ``` - -You can use `gem` to install Gems as normal. - -You can also build TruffleRuby from source, see the -[building instructions](doc/contributor/workflow.md), and using -[Docker](doc/contributor/docker.md). - -Please report any issue you might find on [GitHub](https://github.com/oracle/truffleruby/issues). - -## Aim - -TruffleRuby aims to: - -* Run idiomatic Ruby code faster -* Run Ruby code in parallel -* Boot Ruby applications in less time -* Execute C extensions in a managed environment -* Add fast and low-overhead interoperability with languages like Java, JavaScript, Python and R -* Provide new tooling such as debuggers and monitoring -* All while maintaining very high compatibility with the standard implementation of Ruby - -## TruffleRuby configurations - -There are two main configurations of TruffleRuby: *native* and *JVM*. It's -important to understand the different configurations of TruffleRuby, as each has -different capabilities and performance characteristics. You should pick the -execution mode that is appropriate for your application. - -TruffleRuby by default runs in the *native* -configuration. In this configuration, TruffleRuby is ahead-of-time compiled to a -standalone native executable. This means that you don't need a JVM installed on -your system to use it. The advantage of the native configuration is that it -[starts about as fast as MRI](doc/contributor/svm.md), it may use less memory, -and it becomes fast in less time. The disadvantage of the native configuration -is that you can't use Java tools like VisualVM, you can't use Java -interoperability, and *peak performance may be lower than on the JVM*. The -native configuration is used by default, but you can also request it using -`--native`. To use polyglot programming with the *native* configuration, you -need to use the `--polyglot` flag. To check you are using the *native* -configuration, `ruby --version` should mention `Native`. - -TruffleRuby can also be used in the *JVM* configuration, where it runs as a -normal Java application on the JVM, as any other Java application would. The -advantage of the JVM configuration is that you can use Java interoperability, -and *peak performance may be higher than the native configuration*. The -disadvantage of the JVM configuration is that it takes much longer to start and -to get fast, and may use more memory. The JVM configuration is requested using -`--jvm`. To check you are using the *JVM* configuration, `ruby --version` should -not mention `Native`. - -If you are running a short-running program you probably want the default, -*native*, configuration. If you are running a long-running program and want the -highest possible performance you probably want the *JVM* configuration, by using -`--jvm`. - -At runtime you can tell if you are using the native configuration using -`TruffleRuby.native?`. - -You won't encounter it when using TruffleRuby from the GraalVM, but there is -also another configuration which is TruffleRuby running on the JVM but with the -Graal compiler not available. This configuration will have much lower -performance and should normally only be used for development. `ruby --version` -will mention `Interpreter` for this configuration. - -## System compatibility - -TruffleRuby is actively tested on these systems: - -* Oracle Linux 7 -* Ubuntu 18.04 LTS -* Ubuntu 16.04 LTS -* Fedora 28 -* macOS 10.14 (Mojave) -* macOS 10.13 (High Sierra) - -You may find that TruffleRuby will not work if you severely restrict the -environment, for example by unmounting system filesystems such as `/dev/shm`. - -## Dependencies - -* [LLVM](doc/user/installing-llvm.md) to build and run C extensions -* [libssl](doc/user/installing-libssl.md) for the `openssl` C extension -* [zlib](doc/user/installing-zlib.md) for the `zlib` C extension - -Without these dependencies, many libraries including RubyGems will not work. -TruffleRuby will try to print a nice error message if a dependency is missing, -but this can only be done on a best effort basis. - -You may also need to set up a [UTF-8 locale](doc/user/utf8-locale.md). - -## Current status - -We recommend that people trying TruffleRuby on their gems and applications -[get in touch with us](#contact) for help. - -TruffleRuby is progressing fast but is currently probably not ready for you to -try running your full Ruby application on. However it is ready for -experimentation and curious end-users to try on their gems and smaller -applications. - -TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it -is missing support for Nokogiri and ActiveRecord database drivers which makes it -not practical to run real Rails applications at the moment. - -You will find that many C extensions will not work without modification. - -## Migration from MRI - -TruffleRuby should in most cases work as a drop-in replacement for MRI, but you -should read about our [compatibility](doc/user/compatibility.md). - -## Migration from JRuby - -For many use cases TruffleRuby should work as a drop-in replacement for JRuby. -However, our approach to integration with Java is different to JRuby so you -should read our [migration guide](doc/user/jruby-migration.md). - -## Documentation - -Extensive documentation is available in [`doc`](doc). -[`doc/user`](doc/user) documents how to use TruffleRuby and -[`doc/contributor`](doc/contributor) documents how to develop TruffleRuby. - -## Contact - -The best way to get in touch with us is to join us in -https://gitter.im/graalvm/truffleruby, but you can also Tweet to -[@TruffleRuby](https://twitter.com/truffleruby), or email -chris.seaton@oracle.com. - -## Mailing list - -Announcements about GraalVM, including TruffleRuby, are made on the -[graal-dev](http://mail.openjdk.java.net/mailman/listinfo/graal-dev) mailing list. - -## Authors - -The main authors of TruffleRuby in order of joining the project are: - -* Chris Seaton -* Benoit Daloze -* Kevin Menard -* Petr Chalupa -* Brandon Fish -* Duncan MacGregor -* Christian Wirth - -Additionally: - -* Thomas Würthinger -* Matthias Grimmer -* Josef Haider -* Fabio Niephaus -* Matthias Springer -* Lucas Allan Amorim -* Aditya Bhardwaj - -Collaborations with: - -* [Institut für Systemsoftware at Johannes Kepler University - Linz](http://ssw.jku.at) - -And others. - -## Security - -See the [security documentation](doc/user/security.md). - -## Licence - -TruffleRuby is copyright (c) 2013-2019 Oracle and/or its affiliates, and is made -available to you under the terms of any one of the following three licenses: - -* Eclipse Public License version 1.0, or -* GNU General Public License version 2, or -* GNU Lesser General Public License version 2.1. - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. - -## Attribution - -TruffleRuby is a fork of [JRuby](https://github.com/jruby/jruby), combining it -with code from the [Rubinius](https://github.com/rubinius/rubinius) project, and -also containing code from the standard implementation of Ruby, -[MRI](https://github.com/ruby/ruby). diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt deleted file mode 100644 index f06056fb45fb..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt +++ /dev/null @@ -1,56 +0,0 @@ -Ruby is copyrighted free software by Yukihiro Matsumoto . -You can redistribute it and/or modify it under either the terms of the -2-clause BSDL (see the file BSDL), or the conditions below: - - 1. You may make and give away verbatim copies of the source form of the - software without restriction, provided that you duplicate all of the - original copyright notices and associated disclaimers. - - 2. You may modify your copy of the software in any way, provided that - you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said - modifications to Usenet or an equivalent medium, or by allowing - the author to include your modifications in the software. - - b) use the modified software only within your corporation or - organization. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 3. You may distribute the software in object code or binary form, - provided that you do at least ONE of the following: - - a) distribute the binaries and library files of the software, - together with instructions (in the manual page or equivalent) - on where to get the original distribution. - - b) accompany the distribution with the machine-readable source of - the software. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 4. You may modify and include the part of the software into any other - software (possibly commercial). But some files in the distribution - are not written by the author, so that they are not under these terms. - - For the list of those files and their copying conditions, see the - file LEGAL. - - 5. The scripts and library files supplied as input to or produced as - output from the software do not automatically fall under the - copyright of the software, but belong to whomever generated them, - and may be sold commercially, and may be aggregated with this - software. - - 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/doc/doc/user/netbeans.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/doc/doc/user/netbeans.md deleted file mode 100644 index 0e9236814854..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/doc/doc/user/netbeans.md +++ /dev/null @@ -1,29 +0,0 @@ -# NetBeans integration - -You can debug Ruby programs running in TruffleRuby using the NetBeans IDE. - -## Setup - -* Install NetBeans 8.2 -* Via Tools, Plugins, install 'Truffle Debugging Support' -* [Install TruffleRuby](installing-graalvm.md) - -We then need a project to debug. An example project that works well and -demonstrates features is available on GitHub: - -``` -$ git clone https://github.com/jtulach/sieve.git -``` - -Open `ruby+js/fromjava` as a NetBeans project. - -* Right click on the project -* Open Properties, Build, Compile, Java Platform -* Manage Java Platforms, Add Platform, and select the GraalVM directory -* Now we can set a breakpoint in Ruby by opening `sieve.rb` and clicking on the - line in `Natural#next` -* Finally, 'Debug Project' - -You will be able to debug the Ruby program as normal, and if you look at the -call stack you'll see that there are also Java and JavaScript frames that you -can debug as well, all inside the same virtual machine and debugger. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/native-image.properties deleted file mode 100644 index 69c2e64ac39f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/native-image.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file contains native-image arguments needed to build truffleruby -# - -ImageName = truffleruby - -Requires = tool:truffle tool:nfi - -LauncherClass = org.truffleruby.launcher.RubyLauncher -LauncherClassPath = languages/ruby/truffleruby-annotations.jar:languages/ruby/truffleruby-shared.jar:lib/graalvm/launcher-common.jar:lib/graalvm/truffleruby-launcher.jar - -Args = -H:MaxRuntimeCompileMethods=5400 \ - -H:+AddAllCharsets - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=ruby \ - -Dorg.graalvm.launcher.relative.llvm.home=../lib/cext/sulong-libs diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0.0/jre/languages/ruby/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/MANIFEST.MF b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/MANIFEST.MF deleted file mode 100644 index 44e6deadaa13..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/MANIFEST.MF +++ /dev/null @@ -1,13 +0,0 @@ -Bundle-Name: TruffleRuby -Bundle-Symbolic-Name: org.graalvm.ruby -Bundle-Version: 1.1.0.0 -Bundle-RequireCapability: org.graalvm; filter:="(&(graalvm_version=1.1.0.0 - )(os_name=linux)(os_arch=amd64))" -x-GraalVM-Working-Directories: jre/languages/ruby -x-GraalVM-Message-PostInst: \nIMPORTANT NOTE:\n---------------\nThe Ruby - openssl C extension needs to be recompiled on your system to work with - the installed libssl.\nFirst, make sure TruffleRuby's dependencies are i - nstalled, which are described at:\n https://github.com/oracle/truffleru - by/blob/master/README.md#dependencies\nThen run the following command:\n - ${graalvm_home}/jre/languages/ruby/lib/truffle/post_install_hook - .sh diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/permissions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/permissions deleted file mode 100644 index bb398974f8a7..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/permissions +++ /dev/null @@ -1,7 +0,0 @@ -bin/truffleruby = rwxrwxrwx -bin/rake = rwxrwxrwx -jre/bin/truffleruby = rwxrwxrwx -jre/bin/rake = rwxrwxrwx -LICENSE_TRUFFLERUBY.md = rwxrwxrwx -jre/languages/ruby/release = rw-rw-r-- -jre/languages/ruby/lib/cext/include/sulong/polyglot.h = rw-rw-r-- \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/symlinks b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/symlinks deleted file mode 100644 index fa711df113bd..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/META-INF/symlinks +++ /dev/null @@ -1,6 +0,0 @@ -bin/ruby = ../jre/bin/ruby -bin/rake = ../jre/bin/rake -jre/bin/truffleruby = ../languages/ruby/bin/truffleruby -jre/bin/rake = ../languages/ruby/bin/rake -LICENSE_TRUFFLERUBY.md = jre/languages/ruby/LICENSE_TRUFFLERUBY.md -jre/languages/ruby/bin/ruby = truffleruby \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md deleted file mode 100644 index 8e3aea7e3802..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/LICENSE_TRUFFLERUBY.md +++ /dev/null @@ -1 +0,0 @@ -Some license diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/README.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/README.md deleted file mode 100644 index e23317b39c52..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/README.md +++ /dev/null @@ -1,218 +0,0 @@ -![TruffleRuby logo](logo/png/truffleruby_logo_horizontal_medium.png) - -A high performance implementation of the Ruby programming language. Built on -[GraalVM](http://graalvm.org/) by [Oracle Labs](https://labs.oracle.com). - -## Getting started - -There are three ways to install TruffleRuby: - -* Via [GraalVM](doc/user/installing-graalvm.md), which includes support for - other languages such as JavaScript, R and Python and supports both the - [*native* and *JVM* configurations](#truffleruby-configurations). - Inside GraalVM will then be a `bin/ruby` command that runs TruffleRuby. - We recommend that you use a [Ruby manager](doc/user/ruby-managers.md#configuring-ruby-managers-for-the-full-graalvm-distribution) - to use TruffleRuby inside GraalVM. - -* Via your [Ruby manager/installer](doc/user/ruby-managers.md) (RVM, rbenv, - chruby, ruby-build, ruby-install). This contains only TruffleRuby, in the - [*native* configuration](#truffleruby-configurations), making it a smaller - download. It is meant for users just wanting a Ruby implementation and already - using a Ruby manager. - -* Using the [standalone distribution](doc/user/standalone-distribution.md) - as a simple binary tarball. This distribution is also useful for - [testing TruffleRuby in CI](doc/user/standalone-distribution.md). - On [TravisCI](https://docs.travis-ci.com/user/languages/ruby#truffleruby), you can simply use: - ```yaml - language: ruby - rvm: - - truffleruby - ``` - -You can use `gem` to install Gems as normal. - -You can also build TruffleRuby from source, see the -[building instructions](doc/contributor/workflow.md), and using -[Docker](doc/contributor/docker.md). - -Please report any issue you might find on [GitHub](https://github.com/oracle/truffleruby/issues). - -## Aim - -TruffleRuby aims to: - -* Run idiomatic Ruby code faster -* Run Ruby code in parallel -* Boot Ruby applications in less time -* Execute C extensions in a managed environment -* Add fast and low-overhead interoperability with languages like Java, JavaScript, Python and R -* Provide new tooling such as debuggers and monitoring -* All while maintaining very high compatibility with the standard implementation of Ruby - -## TruffleRuby configurations - -There are two main configurations of TruffleRuby: *native* and *JVM*. It's -important to understand the different configurations of TruffleRuby, as each has -different capabilities and performance characteristics. You should pick the -execution mode that is appropriate for your application. - -TruffleRuby by default runs in the *native* -configuration. In this configuration, TruffleRuby is ahead-of-time compiled to a -standalone native executable. This means that you don't need a JVM installed on -your system to use it. The advantage of the native configuration is that it -[starts about as fast as MRI](doc/contributor/svm.md), it may use less memory, -and it becomes fast in less time. The disadvantage of the native configuration -is that you can't use Java tools like VisualVM, you can't use Java -interoperability, and *peak performance may be lower than on the JVM*. The -native configuration is used by default, but you can also request it using -`--native`. To use polyglot programming with the *native* configuration, you -need to use the `--polyglot` flag. To check you are using the *native* -configuration, `ruby --version` should mention `Native`. - -TruffleRuby can also be used in the *JVM* configuration, where it runs as a -normal Java application on the JVM, as any other Java application would. The -advantage of the JVM configuration is that you can use Java interoperability, -and *peak performance may be higher than the native configuration*. The -disadvantage of the JVM configuration is that it takes much longer to start and -to get fast, and may use more memory. The JVM configuration is requested using -`--jvm`. To check you are using the *JVM* configuration, `ruby --version` should -not mention `Native`. - -If you are running a short-running program you probably want the default, -*native*, configuration. If you are running a long-running program and want the -highest possible performance you probably want the *JVM* configuration, by using -`--jvm`. - -At runtime you can tell if you are using the native configuration using -`TruffleRuby.native?`. - -You won't encounter it when using TruffleRuby from the GraalVM, but there is -also another configuration which is TruffleRuby running on the JVM but with the -Graal compiler not available. This configuration will have much lower -performance and should normally only be used for development. `ruby --version` -will mention `Interpreter` for this configuration. - -## System compatibility - -TruffleRuby is actively tested on these systems: - -* Oracle Linux 7 -* Ubuntu 18.04 LTS -* Ubuntu 16.04 LTS -* Fedora 28 -* macOS 10.14 (Mojave) -* macOS 10.13 (High Sierra) - -You may find that TruffleRuby will not work if you severely restrict the -environment, for example by unmounting system filesystems such as `/dev/shm`. - -## Dependencies - -* [LLVM](doc/user/installing-llvm.md) to build and run C extensions -* [libssl](doc/user/installing-libssl.md) for the `openssl` C extension -* [zlib](doc/user/installing-zlib.md) for the `zlib` C extension - -Without these dependencies, many libraries including RubyGems will not work. -TruffleRuby will try to print a nice error message if a dependency is missing, -but this can only be done on a best effort basis. - -You may also need to set up a [UTF-8 locale](doc/user/utf8-locale.md). - -## Current status - -We recommend that people trying TruffleRuby on their gems and applications -[get in touch with us](#contact) for help. - -TruffleRuby is progressing fast but is currently probably not ready for you to -try running your full Ruby application on. However it is ready for -experimentation and curious end-users to try on their gems and smaller -applications. - -TruffleRuby runs Rails, and passes the majority of the Rails test suite. But it -is missing support for Nokogiri and ActiveRecord database drivers which makes it -not practical to run real Rails applications at the moment. - -You will find that many C extensions will not work without modification. - -## Migration from MRI - -TruffleRuby should in most cases work as a drop-in replacement for MRI, but you -should read about our [compatibility](doc/user/compatibility.md). - -## Migration from JRuby - -For many use cases TruffleRuby should work as a drop-in replacement for JRuby. -However, our approach to integration with Java is different to JRuby so you -should read our [migration guide](doc/user/jruby-migration.md). - -## Documentation - -Extensive documentation is available in [`doc`](doc). -[`doc/user`](doc/user) documents how to use TruffleRuby and -[`doc/contributor`](doc/contributor) documents how to develop TruffleRuby. - -## Contact - -The best way to get in touch with us is to join us in -https://gitter.im/graalvm/truffleruby, but you can also Tweet to -[@TruffleRuby](https://twitter.com/truffleruby), or email -chris.seaton@oracle.com. - -## Mailing list - -Announcements about GraalVM, including TruffleRuby, are made on the -[graal-dev](http://mail.openjdk.java.net/mailman/listinfo/graal-dev) mailing list. - -## Authors - -The main authors of TruffleRuby in order of joining the project are: - -* Chris Seaton -* Benoit Daloze -* Kevin Menard -* Petr Chalupa -* Brandon Fish -* Duncan MacGregor -* Christian Wirth - -Additionally: - -* Thomas Würthinger -* Matthias Grimmer -* Josef Haider -* Fabio Niephaus -* Matthias Springer -* Lucas Allan Amorim -* Aditya Bhardwaj - -Collaborations with: - -* [Institut für Systemsoftware at Johannes Kepler University - Linz](http://ssw.jku.at) - -And others. - -## Security - -See the [security documentation](doc/user/security.md). - -## Licence - -TruffleRuby is copyright (c) 2013-2019 Oracle and/or its affiliates, and is made -available to you under the terms of any one of the following three licenses: - -* Eclipse Public License version 1.0, or -* GNU General Public License version 2, or -* GNU Lesser General Public License version 2.1. - -TruffleRuby contains additional code not always covered by these licences, and -with copyright owned by other people. See -[doc/legal/legal.md](doc/legal/legal.md) for full documentation. - -## Attribution - -TruffleRuby is a fork of [JRuby](https://github.com/jruby/jruby), combining it -with code from the [Rubinius](https://github.com/rubinius/rubinius) project, and -also containing code from the standard implementation of Ruby, -[MRI](https://github.com/ruby/ruby). diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt deleted file mode 100644 index f06056fb45fb..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/doc/doc/legal/ruby-licence.txt +++ /dev/null @@ -1,56 +0,0 @@ -Ruby is copyrighted free software by Yukihiro Matsumoto . -You can redistribute it and/or modify it under either the terms of the -2-clause BSDL (see the file BSDL), or the conditions below: - - 1. You may make and give away verbatim copies of the source form of the - software without restriction, provided that you duplicate all of the - original copyright notices and associated disclaimers. - - 2. You may modify your copy of the software in any way, provided that - you do at least ONE of the following: - - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said - modifications to Usenet or an equivalent medium, or by allowing - the author to include your modifications in the software. - - b) use the modified software only within your corporation or - organization. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 3. You may distribute the software in object code or binary form, - provided that you do at least ONE of the following: - - a) distribute the binaries and library files of the software, - together with instructions (in the manual page or equivalent) - on where to get the original distribution. - - b) accompany the distribution with the machine-readable source of - the software. - - c) give non-standard binaries non-standard names, with - instructions on where to get the original software distribution. - - d) make other distribution arrangements with the author. - - 4. You may modify and include the part of the software into any other - software (possibly commercial). But some files in the distribution - are not written by the author, so that they are not under these terms. - - For the list of those files and their copying conditions, see the - file LEGAL. - - 5. The scripts and library files supplied as input to or produced as - output from the software do not automatically fall under the - copyright of the software, but belong to whomever generated them, - and may be sold commercially, and may be aggregated with this - software. - - 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - PURPOSE. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/doc/doc/user/netbeans.md b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/doc/doc/user/netbeans.md deleted file mode 100644 index 0e9236814854..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/doc/doc/user/netbeans.md +++ /dev/null @@ -1,29 +0,0 @@ -# NetBeans integration - -You can debug Ruby programs running in TruffleRuby using the NetBeans IDE. - -## Setup - -* Install NetBeans 8.2 -* Via Tools, Plugins, install 'Truffle Debugging Support' -* [Install TruffleRuby](installing-graalvm.md) - -We then need a project to debug. An example project that works well and -demonstrates features is available on GitHub: - -``` -$ git clone https://github.com/jtulach/sieve.git -``` - -Open `ruby+js/fromjava` as a NetBeans project. - -* Right click on the project -* Open Properties, Build, Compile, Java Platform -* Manage Java Platforms, Add Platform, and select the GraalVM directory -* Now we can set a breakpoint in Ruby by opening `sieve.rb` and clicking on the - line in `Natural#next` -* Finally, 'Debug Project' - -You will be able to debug the Ruby program as normal, and if you look at the -call stack you'll see that there are also Java and JavaScript frames that you -can debug as well, all inside the same virtual machine and debugger. diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/native-image.properties b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/native-image.properties deleted file mode 100644 index 69c2e64ac39f..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/native-image.properties +++ /dev/null @@ -1,15 +0,0 @@ -# This file contains native-image arguments needed to build truffleruby -# - -ImageName = truffleruby - -Requires = tool:truffle tool:nfi - -LauncherClass = org.truffleruby.launcher.RubyLauncher -LauncherClassPath = languages/ruby/truffleruby-annotations.jar:languages/ruby/truffleruby-shared.jar:lib/graalvm/launcher-common.jar:lib/graalvm/truffleruby-launcher.jar - -Args = -H:MaxRuntimeCompileMethods=5400 \ - -H:+AddAllCharsets - -JavaArgs = -Dpolyglot.image-build-time.PreinitializeContexts=ruby \ - -Dorg.graalvm.launcher.relative.llvm.home=../lib/cext/sulong-libs diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/release b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/release deleted file mode 100644 index dd1bb0bd9a4d..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/ruby/1.1.0_1.0/jre/languages/ruby/release +++ /dev/null @@ -1,3 +0,0 @@ -OS_NAME=linux -OS_ARCH=amd64 -GRAALVM_VERSION=1.0.0-rc15-dev diff --git a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/versions b/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/versions deleted file mode 100644 index 121a4f8613de..000000000000 --- a/vm/src/org.graalvm.component.installer.test/src/org/graalvm/component/installer/repo/versions +++ /dev/null @@ -1,12 +0,0 @@ -There are several versions: -1.0.0.0 with no update -1.0.1.0 with a patch 1.0.1.1 -1.1.0.0 with no update - -Python will be available in all releases. -Ruby is available in 1.0.0.0 and 1.0.1.0; patch exists for Ruby -R is available in 1.0.1.0 and 1.1.0.0; patch exists for R -No patch exists for Python - -Cores are available for 1.0.1.0 and 1.1.0.0 - diff --git a/vm/src/org.graalvm.component.installer/src/META-INF/native-image/org.graalvm/installer/native-image.properties b/vm/src/org.graalvm.component.installer/src/META-INF/native-image/org.graalvm/installer/native-image.properties deleted file mode 100644 index 148fc9626ed3..000000000000 --- a/vm/src/org.graalvm.component.installer/src/META-INF/native-image/org.graalvm/installer/native-image.properties +++ /dev/null @@ -1,3 +0,0 @@ -Args = --enable-http --enable-https \ - --initialize-at-build-time=org.graalvm.component.installer \ - --initialize-at-run-time=sun.rmi,java.rmi diff --git a/vm/src/org.graalvm.component.installer/src/META-INF/native-image/org.graalvm/installer/resource-config.json b/vm/src/org.graalvm.component.installer/src/META-INF/native-image/org.graalvm/installer/resource-config.json deleted file mode 100644 index 97ce90a664a7..000000000000 --- a/vm/src/org.graalvm.component.installer/src/META-INF/native-image/org.graalvm/installer/resource-config.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "bundles": [ - { "name" : "org.graalvm.component.installer.Bundle" }, - { "name" : "org.graalvm.component.installer.commands.Bundle" }, - { "name" : "org.graalvm.component.installer.model.Bundle" }, - { "name" : "org.graalvm.component.installer.remote.Bundle" }, - { "name" : "org.graalvm.component.installer.os.Bundle" }, - { "name" : "org.graalvm.component.installer.persist.Bundle" }, - { "name" : "org.graalvm.component.installer.jar.Bundle" }, - { "name" : "org.graalvm.component.installer.ce.Bundle" }, - { "name" : "org.graalvm.component.installer.gds.Bundle" }, - { "name" : "org.graalvm.component.installer.gds.rest.Bundle" } - ] -} diff --git a/vm/src/org.graalvm.component.installer/src/META-INF/services/org.graalvm.component.installer.ComponentArchiveReader b/vm/src/org.graalvm.component.installer/src/META-INF/services/org.graalvm.component.installer.ComponentArchiveReader deleted file mode 100644 index 2b94a769fb65..000000000000 --- a/vm/src/org.graalvm.component.installer/src/META-INF/services/org.graalvm.component.installer.ComponentArchiveReader +++ /dev/null @@ -1 +0,0 @@ -org.graalvm.component.installer.ce.JarPackageProvider diff --git a/vm/src/org.graalvm.component.installer/src/META-INF/services/org.graalvm.component.installer.SoftwareChannel$Factory b/vm/src/org.graalvm.component.installer/src/META-INF/services/org.graalvm.component.installer.SoftwareChannel$Factory deleted file mode 100644 index 6dd0b27cc30b..000000000000 --- a/vm/src/org.graalvm.component.installer/src/META-INF/services/org.graalvm.component.installer.SoftwareChannel$Factory +++ /dev/null @@ -1,3 +0,0 @@ -org.graalvm.component.installer.ce.WebCatalog$WebCatalogFactory -org.graalvm.component.installer.persist.DirectoryChannelFactory -org.graalvm.component.installer.gds.rest.GDSChannelFactory \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/AbstractIterable.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/AbstractIterable.java deleted file mode 100644 index 1d2a0c93ac7f..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/AbstractIterable.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.util.Collection; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import org.graalvm.component.installer.ComponentCatalog.DownloadInterceptor; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.remote.CatalogIterable; -import org.graalvm.component.installer.remote.FileDownloader; -import org.graalvm.component.installer.remote.RemoteComponentParam; - -/** - * Base class for the different commandline parameters. - * - * @author sdedic - */ -abstract class AbstractIterable implements ComponentIterable { - protected final CommandInput input; - protected final Feedback feedback; - private boolean verifyJars; - private CommandInput.CatalogFactory remoteFactory; - private ComponentCatalog remoteCatalog; - - protected AbstractIterable(CommandInput input, Feedback feedback) { - this.input = input; - this.feedback = feedback; - } - - public boolean isVerifyJars() { - return verifyJars; - } - - @Override - public void setVerifyJars(boolean verifyJars) { - this.verifyJars = verifyJars; - } - - public void setCatalogFactory(CommandInput.CatalogFactory cFactory) { - this.remoteFactory = cFactory; - } - - private ComponentCatalog getRemoteContents() { - if (remoteCatalog != null) { - return remoteCatalog; - } - if (remoteFactory != null) { - remoteCatalog = remoteFactory.createComponentCatalog(input); - } else { - remoteCatalog = new NullCatalog(); - } - return remoteCatalog; - } - - @Override - public ComponentIterable matchVersion(Version.Match m) { - return this; - } - - @Override - public ComponentIterable allowIncompatible() { - return this; - } - - @Override - public ComponentParam createParam(String cmdString, ComponentInfo info) { - RemoteComponentParam param = new CatalogIterable.CatalogItemParam( - getRemoteContents().getDownloadInterceptor(), - info, - info.getName(), - cmdString, - feedback, - input.optValue(Commands.OPTION_NO_DOWNLOAD_PROGRESS) == null); - param.setVerifyJars(verifyJars); - return param; - } - - private static class NullCatalog implements ComponentCatalog, DownloadInterceptor { - @Override - public boolean isAllowDistUpdate() { - return false; - } - - @Override - public ComponentInfo findComponentMatch(String id, Version.Match vmatch, boolean localOnly, boolean exact) { - return null; - } - - @Override - public Set findDependencies(ComponentInfo start, boolean closure, Boolean installed, Set result) { - return new HashSet<>(start.getDependencies()); - } - - @Override - public FileDownloader processDownloader(ComponentInfo info, FileDownloader dn) { - return dn; - } - - @Override - public DownloadInterceptor getDownloadInterceptor() { - return this; - } - - @Override - public void setAllowDistUpdate(boolean distUpgrade) { - } - - @Override - public ComponentInfo findComponentMatch(String id, Version.Match vm, boolean exact) { - return null; - } - - @Override - public String shortenComponentId(ComponentInfo info) { - return info.getId(); - } - - @Override - public Collection getComponentIDs() { - return Collections.emptyList(); - } - - @Override - public Collection loadComponents(String id, Version.Match selector, boolean filelist) { - return Collections.emptySet(); - } - - @Override - public boolean isRemoteEnabled() { - return false; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Archive.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Archive.java deleted file mode 100644 index bff195d1ed86..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Archive.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.channels.ReadableByteChannel; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * Simple abstraction over an archive, so that both JAR and RPMs (or other packaging) can be read. - * - * @author sdedic - */ -public interface Archive extends Iterable, AutoCloseable { - /** - * Opens an input stream for the entry. - * - * @param e file entry - * @return the input stream - * @throws IOException on I/O error - */ - InputStream getInputStream(FileEntry e) throws IOException; - - /** - * Checks that contents of the entry matches the given file. If the archive stores checksums, - * the method may not need do byte comparison but can only compute checksum/hash on the supplied - * content and compare to archive's info. - * - * @param bc the existing content - * @param entry archive entry - * @return true if the content is the same - * @throws IOException on I/O error - */ - boolean checkContentsMatches(ReadableByteChannel bc, FileEntry entry) throws IOException; - - /** - * Verifies integrity of the archive. - * - * @param input options for verificaion - * @return true, if the archive has been verified - * @throws IOException - */ - boolean verifyIntegrity(CommandInput input) throws IOException; - - /** - * Completes metadata in `info' with information within the archive's contents. This method may - * need to iterate through files in the archive. - * - * @param info - * @throws IOException - */ - void completeMetadata(ComponentInfo info) throws IOException; - - @Override - void close() throws IOException; - - /** - * Represents a single entry in the archive. - */ - interface FileEntry { - /** - * Returns name of the entry. Directory names should end with "/". - * - * @return entry name - */ - String getName(); - - /** - * @return true, if the entry represents a directory - */ - boolean isDirectory(); - - /** - * True, if the entry is a symbolic link. - * - * @return True, if the entry represents a symbolic link - */ - boolean isSymbolicLink(); - - /** - * Link target for symbolic links. - * - * @return target path - * @throws java.io.IOException if the link's target could not be read - * @throws IllegalStateException if the entry is not {@link #isSymbolicLink()}. - */ - String getLinkTarget() throws IOException; - - /** - * @return size of the content, only valid for regular files. - */ - long getSize(); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Bundle.properties deleted file mode 100644 index 79d99a97f960..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Bundle.properties +++ /dev/null @@ -1,139 +0,0 @@ -# To change this license header, choose License Headers in Project Properties. -# To change this template file, choose Tools | Templates -# and open the template in the editor. - -Installer_BuiltingCatalogURL=https://www.graalvm.org/component-catalog/graal-updater-component-catalog.properties - -INFO_InstallerVersion=GraalVM Component Updater v{0} -# {0} - additional options placeholder -INFO_Usage=\n\ - Usage: \n\ - \tgu info [-cClLnprstuvVJ] print info about a specific component (from a file, a URL or a catalog)\n\ - \tgu available [-aClvVJ] list components available in a catalog\n\ - \tgu install [-0CcDfiLMnosruvyxY] install a component package\n\ - \tgu list [-clvJ] list installed components, or components from a catalog\n\ - \tgu remove [-0DfMxv] uninstall a component\n\ - \tgu upgrade [-cCnLsuxSd] [] [] upgrade to a recent GraalVM or edition\n\ - \tgu rebuild-images rebuild native executables. Use -h for detailed usage\n\ -\n\ - Common options:\n\ - \ -A, --auto-yes respond YES or ACCEPT to all questions.\n\ - \ -c, --catalog treat parameters as component IDs from a catalog of GraalVM components. This is the default.\n\ - \ -C, --custom-catalog use user-supplied catalog at URL.\n\ - \ -e, --debug debugging. Prints stacktraces, ...\n\ - \ -E, --no-catalog-errors do not stop if at least one catalog is working.\n\ - \ -h, --help print help.\n\ - \ -L, --local-file, --file treat parameters as local filenames of packaged components.\n\ - \ -N, --non-interactive noninteractive mode. Fail when input is required.\n\ - \ --show-version print version information and continue.\n\ - \ -u, --url interpret parameters as URLs of packaged components.\n\ - \ -v, --verbose be verbose. Print versions and dependency information.\n\ - \ --version print version.\n\ -{0}\n\ - Use \n\ - \tgu -h\n\ - to get specific help. - -INFO_UsageExtensions=\n\ - Additonal options:\n\{0}\n - - -ERROR_MissingCommand=No command given. -ERROR_UnknownCommand=Unknown command: {0} -# {0} - option, including the leading - -# {1} - command -ERROR_UnsupportedOption=Command {1} does not support option -{0} -ERROR_CommandWithNoOptions=Command {1} does not support any options -ERROR_UnsupportedGlobalOption=Unknown option: -{0} -ERROR_OptionNeedsParameter=Missing required parameter for option {0} -ERROR_MissingCommand=Missing command. -ERROR_CannotFindPath=File not found: {0} -ERROR_InternalError=Internal error: {0} -ERROR_NoGraalVMDirectory=Could not find GraalVM installation directory. -ERROR_MissingParameter=Missing parameter for command {0} -ERROR_ReadingComponentRegistry=Error loading component registry. -ERROR_MissingFile=Missing file: {0} -ERROR_CorruptedRelease=Release file corrupted in GraalVM installation at: {0} -ERROR_ReleaseSourceRevisions=Could not parse source revisions in: {0} -ERROR_ReadingRealeaseFile=Error accessing release file {0}: {1} -ERROR_AmbiguousCommand=Command {0} is ambiguous. Could be {1} or {2} -ERROR_InvalidGraalVMDirectory=The GraalVM directory {0} is invalid. -ERROR_MultipleSourcesUnsupported=The updater cannot download from a catalog and from a specific URL at the same time. \ - Please run the updater separately for components from a catalog and components from custom URLs. -INSTALLER_Error=Error: {0} -# INSTALLER_InvalidCatalogURL=Catalog URL is invalid: {0} -# {0} - filename -ERROR_UnknownFileFormat=Unknown format: {0} -ERROR_MustBecomeUser=Insufficient privileges for administration of the GraalVM installation. \ - You need to become "{0}" user to perform administrative tasks on GraalVM. \n\ - NOTE: depending on your operating system, you may need to use OS tools to install or uninstall GraalVM components. -ERROR_MustBecomeAdmin=Insufficient privileges for administration of the GraalVM installation. \ - You need to operate as a system administrator to perform administrative tasks on GraalVM. \n\ - NOTE: depending on your operating system, you may need to use OS tools to install or uninstall GraalVM components. -ERROR_UnknownSystem=Operating system name '{0}' wasn't recognized. -STORAGE_CorruptedComponentStorage=Component metadata storage is corrupted. -STORAGE_InvalidReleaseFile=Invalid GraalVM release file. - - -INSTALLER_IOException=I/O error occurred: {0} -INSTALLER_FailError={0} -INSTALLER_FileDoesNotExist=File does not exist: {0} -INSTALLER_FileExists=File already exists: {0} -INSTALLER_DirectoryNotEmpty=Directory is not empty: {0} -INSTALLER_AccessDenied=Permission denied: {0} -INSTALLER_InvalidMetadata=Invalid component metadata or corrupted component package. -INSTALLER_InternalError=Internal error occurred: {0} - -REGISTRY_ReadingComponentList=Error reading component list: {0} -REGISTRY_ReadingComponentMetadata=Error reading metadata of component {0}: {1} - -INSTALL_Capability_graalvm_version=GraalVM Version -INSTALL_Capability_os_arch=Architecture -INSTALL_Capability_os_name=Operating System -INSTALL_Capability_os_variant=Operating System Variant -INSTALL_Capability_java_version=Java Version - - -VERIFY_VerboseCheckRequirements=Checking requirements of component {1} ({0}), version {2} -VERIFY_VerboseCapability=\tRequires {0} = {1}, GraalVM provides: {2} -VERIFY_VerboseCapabilityNone=None -VERIFY_ComponentExists=The same component {0} ({1}) is already installed in version {2} -VERIFY_Dependency_Failed=Component {0} could not be installed. It requires {1} {2}, but the GraalVM provides {3} -VERIFY_CapabilityMissing=None -VERIFY_UpdateGraalVM=Newer GraalVM is required for Component {0}, install GraalVM at least {1}. The current version is {2} -VERIFY_ObsoleteGraalVM=Component {0} requires older GraalVM {1}, the current version is {2}. Component cannot be installed. - -URL_InvalidDownloadURL=Invalid download URL {0}: {1} -URL_ErrorDownloadingNotExist=Component is not accessible at URL {0} -URL_ErrorDownloadingComponent=Error downloading component from {0}: {1} - -COMPONENT_Ambiguous=Component id {0} is ambiguous. Please use a qualified ID. -COMPONENT_AmbiguousIdFound=Component id {0} is ambiguous. It may match {0} or {1}. Please use a qualified ID. - -# {0} - error message -ERROR_RecordLicenseAccepted=WARNING: Could not write license acceptance: {0} -ERROR_UserInput=User input error: {0} -ERROR_Aborted=Terminated. -ERROR_SoftwareChannelBroken=Could not initialize software channel: {0} -ERROR_NoninteractiveInput=Installation in non-interactive mode required user input and was terminated. - -NAME_GraalCoreComponent=GraalVM Core - -VERSION_UnknownVersion1=Unknown version: {0} -VERSION_UnknownVersion2=Unknown version: {0}, try to refine build, e.g. {1} - -FILE_DeleteFailed=Delete of {0} failed: {1}. -FILE_ErrorRestoringPermissions=Error restoring permissions for {0}: {1} -FILE_CannotDeleteFileTryDelayed=Could not delete file or directory {0}, will try later: {1} -FILE_CannotInstallFileTryDelayed=Could not replace file {0}, will try later: {1} -FILE_CannotDeleteParentTryDelayed=Could not delete parent directory {0}, will try later. - -# {0} - installer version -# {1} - graalVM version -MSG_InstallerVersion=GraalVM Updater {0} -WARN_CouldNotCreateLog=Warning: Could not create log file {0}: {1}. Logging to stderr. -WARN_CouldNotInitializeLogManager=Warning: Could not initialize LogManager; using default logging settings. - -# {0} - error message from execution -ERR_InvokingJvmMode=Switch to JVM mode failed: {0} -ERROR_NoSha256Digest=SHA256 digest cannot be computed. Check your Java installation. diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/BundleConstants.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/BundleConstants.java deleted file mode 100644 index bc1cf0935759..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/BundleConstants.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Constants related to component packages / bundles and their structure. - */ -public class BundleConstants { - public static final String BUNDLE_ID = "Bundle-Symbolic-Name"; // NOI18N - public static final String BUNDLE_NAME = "Bundle-Name"; // NOI18N - public static final String BUNDLE_VERSION = "Bundle-Version"; // NOI18N - public static final String BUNDLE_REQUIRED = "Bundle-RequireCapability"; // NOI18N - public static final String BUNDLE_PROVIDED = "Bundle-ProvideCapability"; // NOI18N - public static final String BUNDLE_DEPENDENCY = "Require-Bundle"; // NOI18N - public static final String GRAALVM_CAPABILITY = "org.graalvm"; // NOI18N - public static final String BUNDLE_LICENSE_TYPE = "x-GraalVM-License-Type"; // NOI18N - public static final String BUNDLE_LICENSE_PATH = "x-GraalVM-License-Path"; // NOI18N - public static final String BUNDLE_STABILITY = "x-GraalVM-Stability"; // NOI18N - public static final String BUNDLE_STABILITY2 = "x-GraalVM-Stability-Level"; // NOI18N - - /** - * In manifests, can specify the serial/hashtag for a component. Used mainly in installed - * component storage, copied from download hash or ComponentInfo. - */ - public static final String BUNDLE_SERIAL = "x-GraalVM-Serial"; // NOI18N - - /** - * Extended optional attribute; marks directories, which should be removed completely without - * checking for emptiness. - */ - public static final String BUNDLE_WORKDIRS = "x-GraalVM-Working-Directories"; // NOI18N - - public static final String META_INF_PATH = "META-INF/"; // NOI18N - public static final String META_INF_PERMISSIONS_PATH = "META-INF/permissions"; // NOI18N - public static final String META_INF_SYMLINKS_PATH = "META-INF/symlinks"; // NOI18N - - public static final String GRAAL_COMPONENT_ID = GRAALVM_CAPABILITY; // NOI18N - - /** - * Post-install message. In the future more x-GraalVM-Message might appear - */ - public static final String BUNDLE_MESSAGE_POSTINST = "x-GraalVM-Message-PostInst"; // NOI18N - - /** - * Version key in the release file. - */ - public static final String GRAAL_VERSION = "graalvm_version"; // NOI18N - - /** - * Component distribution tag. Can be one of: - *

    - *
  • bundled - installed by a base package. Cannot be removed. - *
  • optional - installed as an add-on, can be removed. The default. - *
- * Further values may be added in the future. - * - * @since 20.0 - */ - public static final String BUNDLE_COMPONENT_DISTRIBUTION = "x-GraalVM-Component-Distribution"; // NOI18N - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/CommandInput.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/CommandInput.java deleted file mode 100644 index dc70cb9f5c7f..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/CommandInput.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import org.graalvm.component.installer.model.ComponentRegistry; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; -import org.graalvm.component.installer.model.GraalEdition; - -/** - * Provides access to command line parameters and useful variables. - */ -public interface CommandInput { - /** - * Iterates existingFiles on command line. - * - * @return next file from commandline - * @throws FailedOperationException if the named file does not exist. - */ - ComponentIterable existingFiles() throws FailedOperationException; - - /** - * Retrieves the next required parameter. - * - * @return parameter text - * @throws FailedOperationException if the parameter is missing. - */ - String requiredParameter() throws FailedOperationException; - - /** - * Returns the next parameter or {@code null} if all parameters were read. - * - * @return parametr text or {@code null} - */ - String nextParameter(); - - /** - * Peeks onto the next parameter. Does not consume it. A call to {@link #nextParameter} is - * required to advance. - */ - String peekParameter(); - - /** - * Has some parameters ? - */ - boolean hasParameter(); - - /** - * Path to the GraalVM installation. The value is already sanity-checked and represents a - * directory. - * - * @return Path to GraalVM installation. - */ - Path getGraalHomePath(); - - /** - * @return factory to create ComponentCatalogs - */ - CatalogFactory getCatalogFactory(); - - /** - * @return Registry of available components. - */ - ComponentCatalog getRegistry(); - - /** - * @return Registry of local components. - */ - ComponentRegistry getLocalRegistry(); - - /** - * Access to option parameters. Empty (non-{@code null} String} is returned for parameter-less - * options. - * - * @param option value of the option. - * @return option value; {@code null}, if the option is not present - */ - String optValue(String option); - - default String optValue(String option, String defV) { - String s = optValue(option); - return s == null ? defV : s; - } - - default boolean hasOption(String option) { - return optValue(option) != null; - } - - FileOperations getFileOperations(); - - /** - * Obtains a named parameter. - * - * @param key parameter name - * @param cmdLine true, if parameter is on cmdline (system properties); false if from - * environment (env vars) - * @return parameter value - */ - String getParameter(String key, boolean cmdLine); - - default String getParameter(String key, String defValue, boolean cmdLine) { - String s = getParameter(key, cmdLine); - return s != null ? s : defValue; - } - - /** - * Obtains a Map of named parameters. - * - * @param cmdLine - * @return parameters from commandline or environment - */ - Map parameters(boolean cmdLine); - - interface CatalogFactory { - /** - * Create a component catalog for the target VM installation, using the commandline options. - * - * @param input values for the catalog - * @return ComponentCatalog usable with target installation - */ - ComponentCatalog createComponentCatalog(CommandInput input); - - /** - * Lists GraalVM editions defined for the installation. - * - * @return graalvm editions. - */ - List listEditions(ComponentRegistry targetGraalVM); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Commands.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Commands.java deleted file mode 100644 index 11cc3bb75aed..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Commands.java +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Constants related to individual commands. Options, default values, ... - */ -public interface Commands { - /** - * Dry run - do not change anything on the disk. - */ - String OPTION_DRY_RUN = "0"; // NOI18N - String LONG_OPTION_DRY_RUN = "dry-run"; - - /** - * Replace existing components. - */ - String OPTION_REPLACE_COMPONENTS = "r"; // NOI18N - String LONG_OPTION_REPLACE_COMPONENTS = "replace"; // NOI18N - - /** - * Force - implies all replace + ignore options. - */ - String OPTION_FORCE = "f"; // NOI18N - String LONG_OPTION_FORCE = "force"; // NOI18N - - /** - * Interpret command line parameters as files. - */ - String OPTION_FILES = "L"; // NOI18N - String LONG_OPTION_FILES = "local-file"; // NOI18N - - @Deprecated String OPTION_FILES_OLD = "F"; // NOI18N - @Deprecated String LONG_OPTION_FILES_OLD = "file"; // NOI18N - - /** - * Replace different files. - */ - String OPTION_REPLACE_DIFFERENT_FILES = "o"; // NOI18N - String LONG_OPTION_REPLACE_DIFFERENT_FILES = "overwrite"; // NOI18N - - /** - * Do not terminate uninstall on failed file deletions. - */ - String OPTION_IGNORE_FAILURES = "x"; // NOI18N - String LONG_OPTION_IGNORE_FAILURES = "ignore"; // NOI18N - - /** - * List files. - */ - String OPTION_LIST_FILES = "l"; - String LONG_OPTION_LIST_FILES = "list-files"; - - /** - * Display full paths in lists. - */ - String OPTION_FULL_PATHS = "p"; - String LONG_OPTION_FULL_PATHS = "paths"; - - /** - * Ignore open errors, but report. - */ - String OPTION_IGNORE_OPEN_ERRORS = "r"; - String LONG_OPTION_IGNORE_OPEN_ERRORS = "ignore-open"; - - /** - * Hide download progress bar. - */ - String OPTION_NO_DOWNLOAD_PROGRESS = "n"; - String LONG_OPTION_NO_DOWNLOAD_PROGRESS = "no-progress"; - - /** - * Verifies JAR integrity. - */ - String OPTION_NO_VERIFY_JARS = "s"; - String LONG_OPTION_NO_VERIFY_JARS = "no-verify-jars"; - - /** - * Do not use tabular list. - */ - String OPTION_SUPPRESS_TABLE = "t"; - String LONG_OPTION_SUPPRESS_TABLE = "no-tables"; - - /** - * Verbose option, prints more messages. - */ - String OPTION_VERBOSE = "v"; // NOI18N - String LONG_OPTION_VERBOSE = "verbose"; // NOI18N - - /** - * Validate only. - */ - String OPTION_VALIDATE = "y"; - String LONG_OPTION_VALIDATE = "only-validate"; - - /** - * Full validation, may require download of components. - */ - String OPTION_VALIDATE_DOWNLOAD = "Y"; - String LONG_OPTION_VALIDATE_DOWNLOAD = "validate-before"; - - /** - * Print error stack traces. - */ - String OPTION_DEBUG = "e"; // NOI18N - String LONG_OPTION_DEBUG = "debug"; // NOI18N - - /** - * Help. - */ - String OPTION_HELP = "h"; - String LONG_OPTION_HELP = "help"; - - /** - * Interpret parameters as remote component IDs. - */ - String OPTION_CATALOG = "c"; - String LONG_OPTION_CATALOG = "catalog"; - - /** - * Interpret parameters as remote component IDs, uses user-defined catalog URL. - */ - String OPTION_FOREIGN_CATALOG = "C"; - String LONG_OPTION_FOREIGN_CATALOG = "custom-catalog"; - - /** - * Interpret parameters as URLs. - */ - String OPTION_URLS = "u"; - String LONG_OPTION_URLS = "url"; - - /** - * When present on a command, will terminate option processing and all parameters will be passed - * on as positionals. - */ - String DO_NOT_PROCESS_OPTIONS = "*"; - - /** - * Fails if a component which already exists is to be installed. - */ - String OPTION_FAIL_EXISTING = "i"; // NOI18N - String LONG_OPTION_FAIL_EXISTING = "fail-existing"; // NOI18N - - /** - * Automatic YES to all questions. - */ - String OPTION_AUTO_YES = "A"; - String LONG_OPTION_AUTO_YES = "auto-yes"; - - /** - * Abort on all prompts except YES/NO. - */ - String OPTION_NON_INTERACTIVE = "N"; - String LONG_OPTION_NON_INTERACTIVE = "non-interactive"; - - /** - * Return in JSON format if possible. - */ - String OPTION_JSON_OUTPUT = "J"; - String LONG_OPTION_JSON_OUTPUT = "json"; - - /** - * Operate on all components, irrespective of version. - */ - String OPTION_ALL = "a"; - String LONG_OPTION_ALL = "all-versions"; - - /** - * Ignores missing components on upgrade. - */ - String OPTION_IGNORE_MISSING_COMPONENTS = "x"; // NOI18N - String LONG_OPTION_IGNORE_MISSING_COMPONENTS = "ignore-missing"; // NOI18N - - String OPTION_VERSION = "V"; - String LONG_OPTION_VERSION = "use-version"; - - /** - * Uninstall other components depending on the uninstalled ones. - */ - String OPTION_UNINSTALL_DEPENDENT = "D"; - String LONG_OPTION_UNINSTALL_DEPENDENT = "remove-deps"; - - /** - * Attempt to resolve dependencies against local directories. - */ - String OPTION_LOCAL_DEPENDENCIES = "D"; - String LONG_OPTION_LOCAL_DEPENDENCIES = "local-deps"; - - /** - * Ignore component dependencies. - */ - String OPTION_NO_DEPENDENCIES = "M"; - String LONG_OPTION_NO_DEPENDENCIES = "no-deps"; - - /** - * Print version and exit. Non-alnum option to indicate the short form is not defined. - */ - String OPTION_PRINT_VERSION = "@"; - String LONG_OPTION_PRINT_VERSION = "version"; - - /** - * Show version and continue. Non-alnum option to indicate the short form is not defined. - */ - String OPTION_SHOW_VERSION = "#"; - String LONG_OPTION_SHOW_VERSION = "show-version"; - - /** - * Will not fail, if at least one of the catalogs can be read. - */ - String OPTION_IGNORE_CATALOG_ERRORS = "E"; - String LONG_OPTION_IGNORE_CATALOG_ERRORS = "no-catalog-errors"; - - /** - * Use specific edition. - */ - String OPTION_USE_EDITION = "$"; - String LONG_OPTION_USE_EDITION = "edition"; - - /** - * Show the core component. - */ - String OPTION_SHOW_CORE = "%"; - String LONG_OPTION_SHOW_CORE = "show-core"; - - /** - * Show updates to components. Implies --show-core. - */ - String OPTION_SHOW_UPDATES = "&"; - String LONG_OPTION_SHOW_UPDATES = "show-updates"; - - /** - * Install into target directory. - */ - String OPTION_TARGET_DIRECTORY = "d"; - String LONG_OPTION_TARGET_DIRECTORY = "target-dir"; - - /** - * Do not create or update symlink. - */ - String OPTION_NO_SYMLINK = "S"; - String LONG_OPTION_NO_SYMLINK = "no-symlink"; -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/CommonConstants.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/CommonConstants.java deleted file mode 100644 index f3d8badc4e33..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/CommonConstants.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Constants which do not fit elsewhere. - */ -public class CommonConstants { - /** - * The installer's version. Printed as part of the help message. - */ - public static final String INSTALLER_VERSION = "2.0.0"; // NOI18N - - public static final String CAP_GRAALVM_VERSION = "graalvm_version"; - public static final String CAP_OS_ARCH = "os_arch"; - public static final String CAP_OS_NAME = "os_name"; - public static final String CAP_OS_VARIANT = "os_variant"; - public static final String CAP_EDITION = "edition"; - public static final String CAP_JAVA_VERSION = "java_version"; - - public static final String EDITION_CE = "ce"; - - /** - * Replaceable token for the path to the graalvm installation. The token can be used in - * messages. - */ - public static final String TOKEN_GRAALVM_PATH = "graalvm_home"; // NOI18N - - /** - * Path to the runtime lib. Replaceable token for installation messages. - */ - public static final String TOKEN_GRAALVM_RTLIB_DIR = "graalvm_rtlib_dir"; // NOI18N - - /** - * Path to arch-dependent runtime lib. Replaceable token for installation messages. - */ - public static final String TOKEN_GRAALVM_RTLIB_ARCH_DIR = "graalvm_rtlib_arch_dir"; // NOI18N - - /** - * Path to languages home. Replaceable token for installation messages. - */ - public static final String TOKEN_GRAALVM_LANG_DIR = "graalvm_languages_dir"; // NOI18N - - /** - * Relative path for the component storage. - */ - public static final String PATH_COMPONENT_STORAGE = "lib/installer/components"; // NOI18N - - public static final String PATH_JRE_BIN = "bin/"; // NOI18N - - public static final String PATH_USER_GU = ".gu"; // NOI18N - - public static final String PATH_GDS_CONFIG = "config"; // NOI18N - - /** - * System property to specify catalog URL. - */ - public static final String SYSPROP_CATALOG_URL = "org.graalvm.component.catalog"; // NOI18N - - public static final String SYSPROP_JAVA_VERSION = "java.specification.version"; // NOI18N - - public static final String ENV_VARIABLE_PREFIX = "GRAALVM_"; // NOI18N - - /** - * Env variable that points to GraalVM home used for debug and development purposes. - */ - public static final String ENV_GRAALVM_HOME_DEV = "GRAALVM_HOME_DEV"; // NOI18N - - /** - * Env variable that controls catalog URL. - */ - public static final String ENV_CATALOG_URL = ENV_VARIABLE_PREFIX + "CATALOG"; // NOI18N - - /** - * Prefix for env variables that define catalog list. - */ - public static final String ENV_CATALOG_PREFIX = ENV_VARIABLE_PREFIX + "CATALOG_"; // NOI18N - /** - * Prefix for env variables that define catalog list. - */ - public static final String CAP_CATALOG_PREFIX = "component_catalog_"; // NOI18N - - public static final String CAP_CATALOG_EDITION = "edition"; // NOI18N - public static final String CAP_CATALOG_EDITION_NAME = "editionLabel"; // NOI18N - - public static final String CAP_CATALOG_URL = "url"; // NOI18N - public static final String CAP_CATALOG_LABEL = "label"; // NOI18N - - /** - * Component ID prefix for graalvm core components. The prefix will be stripped from the - * display, if the component is not ambiguous. - */ - public static final String GRAALVM_CORE_PREFIX = "org.graalvm"; // NOI18N - - /** - * Short ID of the GraalVM core component. - */ - public static final String GRAALVM_CORE_SHORT_ID = "graalvm"; // NOI18N - - /** - * Key in release file with catalog URL. - */ - public static final String RELEASE_CATALOG_KEY = "component_catalog"; // NOI18N - - /** - * Key in release file with GDS Product ID. - */ - public static final String RELEASE_GDS_PRODUCT_ID_KEY = "gds_product_id"; // NOI18N - - /** - * Default installation dir encoded in RPM packages. The installer will strip this prefix to - * relocate the package contents. - */ - public static final String BUILTIN_INSTALLATION_DIR = "/usr/lib/graalvm"; // NOI18N - - /** - * Origin of the component. A URL. Used only in directory-based registry of installed - * components. - */ - public static final String BUNDLE_ORIGIN_URL = "x-GraalVM-Component-Origin"; // NOI18N - - /** - * ID of the native-image component. - */ - public static final String NATIVE_IMAGE_ID = "native-image"; - - public static final String ENV_DELETE_LIST = "GU_POST_DELETE_LIST"; // NOI18N - public static final String ENV_COPY_CONTENTS = "GU_POST_COPY_CONTENTS"; // NOI18N - - public static final String ARCH_X8664 = "x86_64"; // NOI18N - public static final String ARCH_AARCH64 = "aarch64"; // NOI18N - public static final String ARCH_AMD64 = "amd64"; // NOI18N - - public static final String OS_MACOS_DARWIN = "darwin"; // NOI18N - public static final String OS_TOKEN_MAC = "mac"; // NOI18N - public static final String OS_TOKEN_MACOS = OS_TOKEN_MAC + "os"; // NOI18N - public static final String OS_TOKEN_LINUX = "linux"; // NOI18N - public static final String OS_TOKEN_WINDOWS = "windows"; // NOI18N - - /** - * Return code which will cause the wrapper to retry operations on locked files. - */ - public static final int WINDOWS_RETCODE_DELAYED_OPERATION = 11; - - /** - * Hacky way how to reach out to all classes. Used to switch the output to a script-readable - * format. - */ - public static final String SYSPROP_SIMPLE_OUTPUT = "org.graalvm.component.installer.SimpleOutput"; - - public static final String SYSPROP_OS_NAME = "os.name"; // NOI18N - public static final String SYSPROP_ARCH_NAME = "os.arch"; // NOI18N - public static final String SYSPROP_USER_HOME = "user.home"; // NOI18N - - public static final String JSON_KEY_COMPONENTS = "components"; // NOI18N - public static final String JSON_KEY_COMPONENT_ID = "id"; // NOI18N - public static final String JSON_KEY_COMPONENT_VERSION = "version"; // NOI18N - public static final String JSON_KEY_COMPONENT_NAME = "name"; // NOI18N - public static final String JSON_KEY_COMPONENT_FILENAME = "filename"; // NOI18N - public static final String JSON_KEY_COMPONENT_GRAALVM = "graalvm"; // NOI18N - public static final String JSON_KEY_COMPONENT_STABILITY = "stability"; // NOI18N - public static final String JSON_KEY_COMPONENT_ORIGIN = "origin"; // NOI18N - public static final String JSON_KEY_COMPONENT_FILES = "files"; // NOI18N - public static final String JSON_KEY_COMPONENT_REQUIRES = "requires"; // NOI18N - public static final String JSON_KEY_COMPONENT_ERRORS = "errors"; // NOI18N - public static final String JSON_KEY_COMPONENT_PROBLEMS = "problems"; // NOI18N - public static final String JSON_KEY_COMPONENT_LIC_IMPL_ACCEPT = "isLicenseImplicitlyAccepted"; // NOI18N -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentArchiveReader.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentArchiveReader.java deleted file mode 100644 index 0eeba51dd655..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentArchiveReader.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.IOException; -import java.nio.file.Path; -import org.graalvm.component.installer.persist.MetadataLoader; - -/** - * Recognizes file format and creates and loads metadata for it. - * - * @author sdedic - */ -public interface ComponentArchiveReader { - /** - * Creates a MetadataLoader for the file. The method returns {@code null}, if it does not - * support the file format. - * - * @param p path to the file - * @param fileStart bytes at the start of the file; min 8 bytes. - * @param feedback output interface - * @param verify verify archive integrity - * @param serial identification, optional. If not given the reader is likely to compute a digest - * on the archive, or the component metadata information - * @return Metadata loader instance or {@code null} if unsupported. - * @throws java.io.IOException if the loader creation or file open fails - */ - MetadataLoader createLoader(Path p, byte[] fileStart, String serial, Feedback feedback, boolean verify) throws IOException; -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentCatalog.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentCatalog.java deleted file mode 100644 index 356f6dd5c7ef..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentCatalog.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.util.Set; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.remote.FileDownloader; -import org.graalvm.component.installer.remote.MergeStorage; - -/** - * - * @author sdedic - */ -public interface ComponentCatalog extends ComponentCollection { - ComponentInfo findComponentMatch(String id, Version.Match vmatch, boolean localOnly, boolean exact); - - /** - * Attempts to resolve dependencies or create dependency closure. The 'installed' parameter - * controls the search mode: - *
    - *
  • {@code true}: only search among installed components. Any unresolved dependencies are - * reported. - *
  • {@code false}: do not report components, which are already installed. - *
  • {@code null}: report both installed and uninstalled components. - *
- * - * @param installed controls handling for installed components. - * @param start the starting point - * @param closure if true, makes complete closure of dependencies. False inspects only 1st level - * dependencies. - * @param result set of dependencies. - * @return will contain ids whose Components could not be found. {@code null} is returned - * instead of empty collection for easier test. - */ - Set findDependencies(ComponentInfo start, boolean closure, Boolean installed, Set result); - - DownloadInterceptor getDownloadInterceptor(); - - /** - * @return True, if emote catalogs are enabled. - */ - boolean isRemoteEnabled(); - - interface DownloadInterceptor { - /** - * Configures the downloader, as appropriate for the catalog item. Note that the Catalog may - * reject configuration for a ComponentInfo it knows nothing about - will return - * {@code null} - * - * @param info component for which the Downloader should be configured - * @param dn the downloader instance - * @return the configured Downloader or {@code null}, if the ComponentInfo is not known. - */ - FileDownloader processDownloader(ComponentInfo info, FileDownloader dn); - - /** - * Allows to intercept metadata loader operations. The interface may be implemented on - * {@link SoftwareChannel} merged into {@link MergeStorage}. The default implementation - * simply returns the delegate itself. - * - * @param info component info for which the MetadataLoader is wanted - * @param delegate the original delegate - * @return possibly wrapped/delegated instance - */ - @SuppressWarnings("unused") - default MetadataLoader interceptMetadataLoader(ComponentInfo info, MetadataLoader delegate) { - return delegate; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentCollection.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentCollection.java deleted file mode 100644 index 2b0faa85270b..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentCollection.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.util.Collection; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * A facade that represents a component collection. - * - * @author sdedic - */ -public interface ComponentCollection { - default ComponentInfo findComponent(String id) { - return findComponent(id, null); - } - - boolean isAllowDistUpdate(); - - void setAllowDistUpdate(boolean distUpgrade); - - default ComponentInfo findComponent(String id, Version.Match vm) { - return findComponentMatch(id, vm, false); - } - - ComponentInfo findComponentMatch(String id, Version.Match vm, boolean exactId); - - String shortenComponentId(ComponentInfo info); - - Collection getComponentIDs(); - - Collection loadComponents(String id, Version.Match selector, boolean filelist); -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentInstaller.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentInstaller.java deleted file mode 100644 index 83c4142126f5..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentInstaller.java +++ /dev/null @@ -1,929 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOError; -import java.io.IOException; -import java.io.OutputStream; -import java.io.PrintStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.AccessDeniedException; -import java.nio.file.DirectoryNotEmptyException; -import java.nio.file.FileAlreadyExistsException; -import java.nio.file.Files; -import java.nio.file.NoSuchFileException; -import java.nio.file.Path; -import java.security.CodeSource; -import java.security.ProtectionDomain; -import java.text.MessageFormat; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.ResourceBundle; -import java.util.ServiceConfigurationError; -import java.util.ServiceLoader; -import java.util.Set; -import java.util.function.Consumer; -import java.util.logging.Handler; -import java.util.logging.Level; -import java.util.logging.LogManager; -import java.util.logging.Logger; -import java.util.logging.SimpleFormatter; -import java.util.logging.StreamHandler; -import java.util.stream.Collectors; -import static org.graalvm.component.installer.CommonConstants.PATH_COMPONENT_STORAGE; -import org.graalvm.component.installer.commands.AvailableCommand; -import org.graalvm.component.installer.commands.InfoCommand; -import org.graalvm.component.installer.commands.InstallCommand; -import org.graalvm.component.installer.commands.ListInstalledCommand; -import org.graalvm.component.installer.commands.PostInstCommand; -import org.graalvm.component.installer.commands.PreRemoveCommand; -import org.graalvm.component.installer.commands.RebuildImageCommand; -import org.graalvm.component.installer.commands.UninstallCommand; -import org.graalvm.component.installer.commands.UpgradeCommand; -import org.graalvm.component.installer.gds.GdsCommands; -import org.graalvm.component.installer.gds.rest.GDSTokenStorage; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.os.WindowsJVMWrapper; -import org.graalvm.component.installer.persist.DirectoryStorage; -import org.graalvm.component.installer.remote.CatalogIterable; -import org.graalvm.component.installer.remote.GraalEditionList; -import org.graalvm.launcher.Launcher; -import org.graalvm.options.OptionCategory; -import org.graalvm.options.OptionDescriptor; - -/** - * The launcher. - */ -public class ComponentInstaller extends Launcher { - private static final Logger LOG = Logger.getLogger(ComponentInstaller.class.getName()); - - public static final String GRAAL_DEFAULT_RELATIVE_PATH = "../.."; // NOI18N - - private static final Environment SIMPLE_ENV = new Environment("help", Collections.emptyList(), Collections.emptyMap()).enableStacktraces(); // NOI18N - - private String command; - private InstallerCommand cmdHandler; - private LinkedList cmdlineParams; - private List parameters = Collections.emptyList(); - private Path graalHomePath; - private Path storagePath; - private SimpleGetopt options; - - static final Map commands = new HashMap<>(); - public static final Map globalOptions = new HashMap<>(); - public static final Map componentOptions = new HashMap<>(); - - @SuppressWarnings("deprecation") - static void initCommands() { - // not necessary except for tests to cleanup extra items - commands.clear(); - globalOptions.clear(); - - // options for commands working with component sources: - componentOptions.put(Commands.OPTION_CATALOG, ""); - componentOptions.put(Commands.OPTION_FILES, ""); - componentOptions.put(Commands.OPTION_URLS, ""); - componentOptions.put(Commands.OPTION_FOREIGN_CATALOG, "s"); - componentOptions.put(Commands.OPTION_FILES_OLD, "=L"); - - componentOptions.put(Commands.LONG_OPTION_FILES, Commands.OPTION_FILES); - componentOptions.put(Commands.LONG_OPTION_CATALOG, Commands.OPTION_CATALOG); - componentOptions.put(Commands.LONG_OPTION_URLS, Commands.OPTION_URLS); - componentOptions.put(Commands.LONG_OPTION_FOREIGN_CATALOG, Commands.OPTION_FOREIGN_CATALOG); - componentOptions.put(Commands.LONG_OPTION_FILES_OLD, Commands.OPTION_FILES); - - commands.put("install", new InstallCommand()); // NOI18N - commands.put("remove", new UninstallCommand()); // NOI18N - commands.put("list", new ListInstalledCommand()); // NOI18N - commands.put("available", new AvailableCommand()); // NOI18N - commands.put("info", new InfoCommand()); // NOI18N - commands.put("rebuild-images", new RebuildImageCommand()); // NOI18N - commands.put("update", new UpgradeCommand()); // NOI18N - commands.put("upgrade", new UpgradeCommand()); // NOI18N - - // commands used internally by system scripts, names intentionally hashed. - commands.put("#postinstall", new PostInstCommand()); // NOI18N - commands.put("#preremove", new PreRemoveCommand()); // NOI18N - - globalOptions.put(Commands.OPTION_VERBOSE, ""); - globalOptions.put(Commands.OPTION_DEBUG, ""); - globalOptions.put(Commands.OPTION_HELP, ""); - - globalOptions.put(Commands.LONG_OPTION_VERBOSE, Commands.OPTION_VERBOSE); - globalOptions.put(Commands.LONG_OPTION_DEBUG, Commands.OPTION_DEBUG); - globalOptions.put(Commands.LONG_OPTION_HELP, Commands.OPTION_HELP); - - globalOptions.put(Commands.OPTION_AUTO_YES, ""); - globalOptions.put(Commands.LONG_OPTION_AUTO_YES, Commands.OPTION_AUTO_YES); - - globalOptions.put(Commands.OPTION_NON_INTERACTIVE, ""); - globalOptions.put(Commands.LONG_OPTION_NON_INTERACTIVE, Commands.OPTION_NON_INTERACTIVE); - - globalOptions.put(Commands.OPTION_PRINT_VERSION, ""); - globalOptions.put(Commands.OPTION_SHOW_VERSION, ""); - - globalOptions.put(Commands.LONG_OPTION_PRINT_VERSION, Commands.OPTION_PRINT_VERSION); - globalOptions.put(Commands.LONG_OPTION_SHOW_VERSION, Commands.OPTION_SHOW_VERSION); - - globalOptions.put(Commands.OPTION_IGNORE_CATALOG_ERRORS, ""); - globalOptions.put(Commands.LONG_OPTION_IGNORE_CATALOG_ERRORS, Commands.OPTION_IGNORE_CATALOG_ERRORS); - - // for simplicity, these options are global, but still commands that use them should - // declare them explicitly. - globalOptions.putAll(componentOptions); - - } - - private static final ResourceBundle BUNDLE = ResourceBundle.getBundle( - "org.graalvm.component.installer.Bundle"); // NOI18N - - public static void forSoftwareChannels(boolean report, Consumer callback) { - ServiceLoader channels = ServiceLoader.load(SoftwareChannel.Factory.class); - for (Iterator it = channels.iterator(); it.hasNext();) { - try { - SoftwareChannel.Factory ch = it.next(); - callback.accept(ch); - } catch (ServiceConfigurationError | Exception ex) { - if (report) { - LOG.log(Level.SEVERE, - MessageFormat.format(BUNDLE.getString("ERROR_SoftwareChannelBroken"), ex.getLocalizedMessage())); - } - } - } - } - - static { - initCommands(); - } - - public ComponentInstaller(String[] args) { - cmdlineParams = new LinkedList<>(Arrays.asList(args)); - } - - protected void printUsage(Feedback output) { - output.output("INFO_InstallerVersion", CommonConstants.INSTALLER_VERSION); // NOI18N - printHelp(output); - } - - private static void printHelp(Feedback output) { - StringBuilder extra = new StringBuilder(); - - forSoftwareChannels(true, (ch) -> { - ch.init(SIMPLE_ENV, output); - String s = ch.globalOptionsHelp(); - if (s != null && !s.isBlank()) { - extra.append(s).append("\n"); - } - }); - String extraS; - - if (extra.length() != 0) { - extraS = output.l10n("INFO_UsageExtensions", extra.substring(0, extra.length() - 1)); - } else { - extraS = ""; // NOI18N - } - - output.output("INFO_Usage", extraS); // NOI18N - } - - static void printErr(String messageKey, Object... args) { - SIMPLE_ENV.message(messageKey, args); - } - - static RuntimeException err(String messageKey, Object... args) { - printErr(messageKey, args); - printHelp(SIMPLE_ENV); - System.exit(1); - throw new RuntimeException("should not reach here"); - } - - protected RuntimeException error(String messageKey, Object... args) { - return err(messageKey, args); - } - - private Environment env; - private CommandInput input; - private Feedback feedback; - - CommandInput getInput() { - return input; - } - - protected void setInput(CommandInput input) { - this.input = input; - } - - Feedback getFeedback() { - return feedback; - } - - protected void setFeedback(Feedback feedback) { - this.feedback = feedback; - } - - Path getGraalHomePath() { - return graalHomePath; - } - - protected Environment setupEnvironment(SimpleGetopt go) { - Environment e = new Environment(command, parameters, go.getOptValues()); - setInput(e); - setFeedback(e); - return e; - } - - protected Environment completeEnvironment() { - if (env.getGraalHomePath() != null) { - return env; - } - - findGraalHome(); - env.setGraalHome(graalHomePath); - // Use our own GraalVM's trust store contents; also bypasses embedded trust store - // when running AOT. - Path trustStorePath = SystemUtils.resolveRelative(SystemUtils.getRuntimeBaseDir(env.getGraalHomePath()), - "lib/security/cacerts"); // NOI18N - System.setProperty("javax.net.ssl.trustStore", trustStorePath.normalize().toString()); // NOI18N - DirectoryStorage storage = new DirectoryStorage(env, storagePath, graalHomePath); - storage.setConfig(env); - storage.setJavaVersion("" + SystemUtils.getJavaMajorVersion(env)); - env.setLocalRegistry(new ComponentRegistry(env, storage)); - FileOperations fops = FileOperations.createPlatformInstance(env, env.getGraalHomePath()); - env.setFileOperations(fops); - - // also sets up input and feedback. - forSoftwareChannels(true, (ch) -> { - ch.init(input, feedback); - }); - - return env; - } - - protected SimpleGetopt createOptionsObject(Map opts) { - return new SimpleGetopt(opts); - } - - SimpleGetopt createOptions(LinkedList cmdline) { - SimpleGetopt go = createOptionsObject(globalOptions).ignoreUnknownOptions(true); - go.setParameters(new LinkedList<>(cmdline)); - for (String s : commands.keySet()) { - go.addCommandOptions(s, commands.get(s).supportedOptions()); - } - go.process(); - options = go; - command = go.getCommand(); - cmdHandler = commands.get(command); - parameters = go.getPositionalParameters(); - env = setupEnvironment(go); - return go; - } - - SimpleGetopt interpretOptions(SimpleGetopt go) { - completeEnvironment(); - List unknownOptions = go.getUnknownOptions(); - if (env.hasOption(Commands.OPTION_HELP) && go.getCommand() == null) { - unknownOptions.add("help"); - } - parseUnknownOptions(unknownOptions); - if (runLauncher()) { - return null; - } - return go; - } - - public String getCommand() { - return command; - } - - public List getParameters() { - return parameters; - } - - int processOptions(LinkedList cmdline) { - // setOutput(new EnvStream(true, new ByteArrayOutputStream(100))); - // setError(new EnvStream(true, new ByteArrayOutputStream(100))); - - if (cmdline.size() < 1) { - env = SIMPLE_ENV; - printDefaultHelp(OptionCategory.USER); - return 1; - } - - SimpleGetopt go = createOptions(cmdline); - launch(cmdline); - go = interpretOptions(go); - - if (go == null) { - return 0; - } - if (env.hasOption(Commands.OPTION_PRINT_VERSION)) { - printVersion(); - return 0; - } else if (env.hasOption(Commands.OPTION_SHOW_VERSION)) { - printVersion(); - } - if (env.hasOption(GdsCommands.OPTION_SHOW_TOKEN)) { - GDSTokenStorage.printToken(env, input); - return 0; - } - if (env.hasOption(GdsCommands.OPTION_REVOKE_TOKEN) || env.hasOption(GdsCommands.OPTION_REVOKE_CURRENT_TOKEN)) { - GDSTokenStorage.revokeToken(env, input, env.optValue(GdsCommands.OPTION_REVOKE_TOKEN)); - return 0; - } - if (env.hasOption(GdsCommands.OPTION_REVOKE_ALL_TOKENS)) { - GDSTokenStorage.revokeAllTokens(env, input, env.optValue(GdsCommands.OPTION_REVOKE_ALL_TOKENS)); - return 0; - } - - // check only after the version option: - if (cmdHandler == null) { - error("ERROR_MissingCommand"); // NOI18N - } - - int srcCount = 0; - if (input.hasOption(Commands.OPTION_FILES)) { - srcCount++; - } - if (input.hasOption(Commands.OPTION_URLS)) { - srcCount++; - } - if (srcCount > 1) { - error("ERROR_MultipleSourcesUnsupported"); - } - - if (input.hasOption(Commands.OPTION_AUTO_YES)) { - env.setAutoYesEnabled(true); - } - if (input.hasOption(Commands.OPTION_NON_INTERACTIVE)) { - env.setNonInteractive(true); - } - - // explicit location - String catalogURL = getExplicitCatalogURL(); - String builtinCatLocation = getReleaseCatalogURL(); - if (builtinCatLocation == null) { - builtinCatLocation = feedback.l10n("Installer_BuiltingCatalogURL"); - } - - GraalEditionList editionList = new GraalEditionList(feedback, input, input.getLocalRegistry()); - editionList.setDefaultCatalogSpec(builtinCatLocation); - editionList.setOverrideCatalogSpec(catalogURL); - env.setCatalogFactory(editionList); - - if (input.hasOption(Commands.OPTION_USE_EDITION)) { - input.getLocalRegistry().setOverrideEdition(input.optValue(Commands.OPTION_USE_EDITION)); - } - - boolean builtinsImplied = true; - boolean setIterable = true; - if (input.hasOption(Commands.OPTION_FILES)) { - FileIterable fi = new FileIterable(env, env); - fi.setCatalogFactory(editionList); - env.setFileIterable(fi); - - // optionally resolve local dependencies against parent directories - // of specified files. - builtinsImplied = false; - if (input.hasOption(Commands.OPTION_LOCAL_DEPENDENCIES)) { - while (env.hasParameter()) { - String s = env.nextParameter(); - Path p = SystemUtils.fromUserString(s); - if (p != null) { - Path parent = p.getParent(); - if (parent != null && Files.isDirectory(parent)) { - SoftwareChannelSource localSource = new SoftwareChannelSource(parent.toUri().toString(), null); - localSource.setPriority(10000); - editionList.addLocalChannelSource(localSource); - } - } - } - env.resetParameters(); - } - setIterable = false; - } else if (input.hasOption(Commands.OPTION_URLS)) { - DownloadURLIterable dit = new DownloadURLIterable(env, env); - dit.setCatalogFactory(editionList); - env.setFileIterable(dit); - setIterable = false; - builtinsImplied = false; - } - - if (setIterable) { - env.setFileIterable(new CatalogIterable(env, env)); - } - - editionList.setRemoteSourcesAllowed(builtinsImplied || env.hasOption(Commands.OPTION_CATALOG) || - env.hasOption(Commands.OPTION_FOREIGN_CATALOG)); - return -1; - } - - int doProcessCommand() throws IOException { - cmdHandler.init(input, feedback.withBundle(cmdHandler.getClass())); - return cmdHandler.execute(); - } - - private int processCommand(LinkedList cmds) { - int retcode = 0; - try { - retcode = processOptions(cmds); - if (retcode >= 0) { - return retcode; - } - // do not print before retcode check; parameters like --help may end the processing - // early, and - // INFO would be printed on default log level. - LOG.log(Level.INFO, "Installer starting"); - retcode = doProcessCommand(); - } catch (FileAlreadyExistsException ex) { - feedback.error("INSTALLER_FileExists", ex, ex.getLocalizedMessage()); // NOI18N - return 2; - } catch (NoSuchFileException ex) { - feedback.error("INSTALLER_FileDoesNotExist", ex, ex.getLocalizedMessage()); // NOI18N - return 2; - } catch (AccessDeniedException ex) { - feedback.error("INSTALLER_AccessDenied", ex, ex.getLocalizedMessage()); - return 2; - } catch (DirectoryNotEmptyException ex) { - feedback.error("INSTALLER_DirectoryNotEmpty", ex, ex.getLocalizedMessage()); // NOI18N - return 2; - } catch (IOError | IOException ex) { - feedback.error("INSTALLER_IOException", ex, ex.getLocalizedMessage()); // NOI18N - return 2; - } catch (MetadataException ex) { - feedback.error("INSTALLER_InvalidMetadata", ex, ex.getLocalizedMessage()); // NOI18N - return 3; - } catch (UserAbortException ex) { - feedback.error("ERROR_Aborted", ex, ex.getLocalizedMessage()); // NOI18N - return 4; - } catch (NonInteractiveException ex) { - return 5; - } catch (InstallerStopException ex) { - feedback.error("INSTALLER_Error", ex, ex.getLocalizedMessage()); // NOI18N - return 3; - } catch (AbortException ex) { - feedback.error(null, ex.getCause(), ex.getLocalizedMessage()); // NOI18N - return ex.getExitCode(); - } catch (RuntimeException ex) { - feedback.error("INSTALLER_InternalError", ex, ex.getLocalizedMessage()); // NOI18N - return 3; - } finally { - if (env != null) { - try { - if (env.close()) { - retcode = CommonConstants.WINDOWS_RETCODE_DELAYED_OPERATION; - } - } catch (IOException ex) { - } - } - } - return retcode; - } - - /** - * Finds Graal Home directory. It is either specified by the GRAALVM_HOME_DEV system property, - * environment variable, or the executing JAR's location - in the order of precedence. - *

- * The location is sanity checked and the method throws {@link FailedOperationException} if not - * proper Graal dir. - * - * @return existing Graal home - */ - Path findGraalHome() { - String graalHome = input.getParameter(CommonConstants.ENV_GRAALVM_HOME_DEV, // NOI18N - true); - Path graalPath = null; - if (graalHome != null) { - graalPath = SystemUtils.fromUserString(graalHome); - } else { - URL loc = null; - ProtectionDomain pd = ComponentInstaller.class.getProtectionDomain(); - if (pd != null) { - CodeSource cs = pd.getCodeSource(); - if (cs != null) { - loc = cs.getLocation(); - } - } - if (loc != null) { - try { - File f = new File(loc.toURI()); - Path guParent = f.isFile() ? f.toPath().getParent() : f.toPath(); - if (guParent != null) { - graalPath = guParent.resolve(SystemUtils.fromCommonString(GRAAL_DEFAULT_RELATIVE_PATH)).normalize().toAbsolutePath(); - Path p = graalPath.getFileName(); - if (p != null && "lib".equals(p.toString())) { // NOi18N - graalPath = graalPath.getParent(); - } - } - } catch (URISyntaxException ex) { - Logger.getLogger(ComponentInstaller.class.getName()).log(Level.SEVERE, null, ex); - } - } - } - if (graalPath == null) { - throw SIMPLE_ENV.failure("ERROR_NoGraalVMDirectory", null); - } - if (!Files.isDirectory(graalPath) || !Files.exists(graalPath.resolve(SystemUtils.fileName("release")))) { - throw SIMPLE_ENV.failure("ERROR_InvalidGraalVMDirectory", null, graalPath); - } - if (!Files.isDirectory(storagePath = graalPath.resolve(SystemUtils.fromCommonString(PATH_COMPONENT_STORAGE)))) { - throw SIMPLE_ENV.failure("ERROR_InvalidGraalVMDirectory", null, graalPath); - } - graalHomePath = graalPath.normalize(); - - String libpath = System.getProperty("java.library.path"); // NOI18N - if (libpath == null || libpath.isEmpty()) { - // SVM mode: libpath is not define, define it to the JRE: - Path newLibPath = SystemUtils.getRuntimeLibDir(graalPath, true); - if (newLibPath == null) { - throw SIMPLE_ENV.failure("ERROR_UnknownSystem", null, System.getProperty("os.name")); // NOI18N - } - System.setProperty("java.library.path", newLibPath.toString()); // NOI18N - } - return graalPath; - } - - static void initGlobalOptions() { - forSoftwareChannels(true, (ch) -> { - ch.init(SIMPLE_ENV, SIMPLE_ENV); - globalOptions.putAll(ch.globalOptions()); - }); - } - - public void run() { - initGlobalOptions(); - try { - System.exit(processCommand(cmdlineParams)); - } catch (UserAbortException ex) { - SIMPLE_ENV.message("ERROR_Aborted", ex.getMessage()); // NOI18N - } catch (Exception ex) { - SIMPLE_ENV.error("ERROR_InternalError", ex, ex.getMessage()); // NOI18N - System.exit(3); - } - } - - String getExplicitCatalogURL() { - String def = null; - String cmdLine = input.optValue(Commands.OPTION_FOREIGN_CATALOG); - if (cmdLine != null) { - def = cmdLine; - } - String envVar = input.getParameter(CommonConstants.ENV_CATALOG_URL, false); - if (envVar != null) { - def = envVar; - } - String s = input.getParameter(CommonConstants.SYSPROP_CATALOG_URL, def, true); - if (s == null) { - return null; - } - boolean useAsFile = false; - - try { - URI check = URI.create(s); - if (check.getScheme() == null || check.getScheme().length() < 2) { - useAsFile = true; - } - } catch (IllegalArgumentException ex) { - // expected, use the argument as it is. - useAsFile = true; - } - if (useAsFile) { - Path p = SystemUtils.fromUserString(s); - // convert plain filename to file:// URL. - if (Files.isReadable(p) || Files.isDirectory(p)) { - return p.toFile().toURI().toString(); - } - } - return s; - } - - private String getReleaseCatalogURL() { - String s = env.getLocalRegistry().getGraalCapabilities().get(CommonConstants.RELEASE_CATALOG_KEY); - return s; - } - - /** - * @param args the command line arguments - */ - public static void main(String[] args) { - new ComponentInstaller(args).run(); - } - - /** - * Delegates the output to the {@link Environment} functions. The stream is configured into - * Launcher so that even SDK output goes through the single i/o point in GU. - */ - final class EnvStream extends PrintStream { - private final boolean error; - - EnvStream(boolean err, OutputStream dummyStream) { - super(dummyStream); - this.error = err; - } - - @Override - public PrintStream append(char c) { - env.verbatimPart("" + c, error); - return this; - } - - @Override - public PrintStream append(CharSequence csq, int start, int end) { - CharSequence cs = (csq == null ? "null" : csq); - append(cs.subSequence(start, end)); - return this; - } - - @Override - public PrintStream append(CharSequence csq) { - CharSequence cs = (csq == null ? "null" : csq); - env.verbatimPart(cs.toString(), error, false); - return this; - } - - @Override - public void println(Object x) { - println(String.valueOf(x)); - } - - @Override - public void println(String x) { - if (error) { - env.message(null, x); - } else { - env.output(null, x); - } - } - - @Override - public void println(char[] x) { - println(String.valueOf(x)); - } - - @Override - public void println(double x) { - println(String.valueOf(x)); - } - - @Override - public void println(float x) { - println(String.valueOf(x)); - } - - @Override - public void println(long x) { - println(String.valueOf(x)); - } - - @Override - public void println(int x) { - println(String.valueOf(x)); - } - - @Override - public void println(char x) { - println(String.valueOf(x)); - } - - @Override - public void println(boolean x) { - println(String.valueOf(x)); - } - - @Override - public void println() { - println(""); - } - - @Override - public void print(Object obj) { - print(String.valueOf(obj)); - } - - @Override - public void print(String s) { - env.verbatimPart(s, error, false); - } - - @Override - public void print(char[] s) { - print(String.valueOf(s)); - } - - @Override - public void print(double d) { - print(String.valueOf(d)); - } - - @Override - public void print(float f) { - print(String.valueOf(f)); - } - - @Override - public void print(long l) { - print(String.valueOf(l)); - } - - @Override - public void print(int i) { - print(String.valueOf(i)); - } - - @Override - public void print(char c) { - print(String.valueOf(c)); - } - - @Override - public void print(boolean b) { - print(String.valueOf(b)); - } - } - - /** - * Configures logging, based on `log.*' options passed on commandline. - * - * @param properties - */ - void configureLogging(Map properties) { - ByteArrayOutputStream os = new ByteArrayOutputStream(); - PrintStream ps = new PrintStream(os); - Collection keep = new LinkedList<>(); - boolean rootLevelSet = false; - - for (String key : properties.keySet()) { - if (key.startsWith("log.") && key.endsWith(".level")) { // NOI18N - String v = properties.get(key); - if (v == null) { - continue; - } - String k; - - if (key.length() > 10) { - k = key.substring(4); - } else { - k = ".level"; // NOI18N - rootLevelSet = true; - } - ps.print(k); - ps.print('='); // NOI18N - ps.println(v); - keep.add(Logger.getLogger(k.substring(0, k.length() - 6))); - } - } - if (!rootLevelSet) { - // the default logging level, will prevent INFO messages to come out. - ps.println(".level=WARNING"); - } - // The default formatter is two -line; looks ugly. - ps.println("java.util.logging.SimpleFormatter.format=[%4$-7s] %5$s %n"); - ps.println(""); - try { - LogManager.getLogManager().readConfiguration(new ByteArrayInputStream(os.toByteArray())); - } catch (IOException ex) { - env.error("WARN_CouldNotInitializeLogManager", ex, ex.getLocalizedMessage()); - return; - } - - Logger logger = Logger.getLogger(""); // NOI18N - - Handler[] old = logger.getHandlers(); - Path p = getLogFile(); - if (old.length > 0) { - // if there are existing handlers, should be sufficient to - // just set level on them. - for (int i = 0; i < old.length; i++) { - old[i].setLevel(Level.ALL); - } - } - if (old.length == 0 || p != null) { - OutputStream logOs = new EnvStream(true, System.err); - try { - if (p != null) { - logOs = newLogStream(getLogFile()); - } - } catch (IOException ex) { - env.error("WARN_CouldNotCreateLog", ex, p.toString(), ex.getLocalizedMessage()); - } - Handler h = new StreamHandler(logOs, new SimpleFormatter()); - h.setLevel(Level.ALL); - logger.addHandler(h); - } - } - - @Override - protected boolean canPolyglot() { - return false; - } - - public void launch(List args) { - maybeNativeExec(args, args, false); - // // Uncomment for debugging jvmmode launcher - // if (System.getProperty("test.wrap") != null) { - // maybeExec(args, args, false, VMType.Native); - // System.exit( - // executeJVMMode(System.getProperty("java.class.path"), args, args) // NOI18N - // ); - // } - } - - public Map parseUnknownOptions(List uOpts) { - List ooo = uOpts.stream().map((o) -> o.length() > 1 ? "--" + o : "-" + o).collect(Collectors.toList()); - Map polyOptions = new HashMap<>(); - parseUnrecognizedOptions(null, polyOptions, ooo); - - configureLogging(polyOptions); - - return polyOptions; - } - - @Override - protected void printHelp(OptionCategory maxCategory) { - printUsage(env); - } - - @Override - protected void printVersion() { - feedback.output("MSG_InstallerVersion", - env.getLocalRegistry().getGraalVersion().displayString()); - } - - public boolean runLauncher() { - return super.runLauncherAction(); - } - - @Override - protected void collectArguments(Set result) { - result.addAll(options.getAllOptions()); - } - - @Override - protected OptionDescriptor findOptionDescriptor(String group, String key) { - return null; - } - - /** - * Will act as a wrapper for an installer executing in JVM mode. NOTE: this method is only - * called in AOT mode. Unlike the default implementation, this will not replace the existing - * process, but rather execute a child process with env variables set up, then will perform the - * post-processing. - * - * @param jvmArgs JVM arguments for the process - * @param remainingArgs program arguments - */ - @Override - protected void executeJVM(String classpath, List jvmArgs, List remainingArgs) { - completeEnvironment(); - if (SystemUtils.isWindows()) { - int retcode = executeJVMMode(classpath, jvmArgs, remainingArgs); - System.exit(retcode); - } else { - super.executeJVM(classpath, jvmArgs, remainingArgs); - } - } - - int executeJVMMode(String classpath, List jvmArgs, List remainingArgs) { - WindowsJVMWrapper jvmWrapper = new WindowsJVMWrapper(env, - env.getFileOperations(), env.getGraalHomePath()); - jvmWrapper.vm(getGraalVMBinaryPath("java").toString(), jvmArgs).mainClass(getMainClass()).classpath(classpath).args(remainingArgs); - try { - return jvmWrapper.execute(); - } catch (IOException ex) { - throw env.failure("ERR_InvokingJvmMode", ex, ex.getMessage()); - } - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentIterable.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentIterable.java deleted file mode 100644 index ab657ef0ee32..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentIterable.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import org.graalvm.component.installer.model.ComponentInfo; - -public interface ComponentIterable extends Iterable { - void setVerifyJars(boolean verify); - - ComponentIterable matchVersion(Version.Match m); - - ComponentIterable allowIncompatible(); - - // XXX perhaps move to CatalogContents / ComponentCollection - ComponentParam createParam(String cmdString, ComponentInfo info); -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentParam.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentParam.java deleted file mode 100644 index 13bbc3d5536d..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ComponentParam.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.IOException; -import org.graalvm.component.installer.persist.MetadataLoader; - -public interface ComponentParam { - String getSpecification(); - - String getDisplayName(); - - MetadataLoader createMetaLoader() throws IOException; - - MetadataLoader createFileLoader() throws IOException; - - boolean isComplete(); - - void close() throws IOException; - - String getFullPath(); - - String getShortName(); -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Config.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Config.java deleted file mode 100644 index b8cc41910935..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Config.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Interface for GU environment object. Implemented by {@link Environment} and tests. - * - * @author sdedic - */ -public interface Config { - Config enableStacktraces(); - - boolean isAutoYesEnabled(); - - void setAutoYesEnabled(boolean autoYesEnabled); - - boolean isNonInteractive(); - - void setNonInteractive(boolean nonInteractive); - - void setAllOutputToErr(boolean allOutputToErr); - - void setFileIterable(ComponentIterable fileIterable); - - void setCatalogFactory(CommandInput.CatalogFactory catalogFactory); -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/DependencyException.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/DependencyException.java deleted file mode 100644 index c56d784153c6..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/DependencyException.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Thrown on a failed requirement / dependency of a Component. - */ -public class DependencyException extends InstallerStopException { - private static final long serialVersionUID = 1L; - private final String component; - private final String version; - private final String installedVersion; - - /** - * Constructs a dependency exception. - * - * @param component component / feature which failed the requirement - * @param version version of the offending component/feature. {@code null} for conflicting - * component - * @param installedVersion the actually installed (offending) version. {@code null}, if the - * component is not installed and should be - * @param message display message - */ - public DependencyException(String component, String version, String installedVersion, String message) { - super(message); - this.component = component; - this.version = version; - this.installedVersion = installedVersion; - } - - public DependencyException(String component, String version, String message) { - super(message); - this.component = component; - this.version = version; - this.installedVersion = null; - } - - public String getComponent() { - return component; - } - - public String getVersion() { - return version; - } - - public String getInstalledVersion() { - return installedVersion; - } - - /** - * Represents a conflict between components. The same component is installed. - */ - public static class Conflict extends DependencyException { - private static final long serialVersionUID = 1L; - - public Conflict(String component, String version, String installedVersion, String message) { - super(component, version, installedVersion, message); - } - } - - /** - * Represents requirements mismatch. One component requires something, which is not satisfied by - * the installation (not present or wrong version) - */ - public static class Mismatch extends DependencyException { - private static final long serialVersionUID = 1L; - private final String capability; - - public Mismatch(String component, String capability, String version, String installedVersion, String message) { - super(component, version, installedVersion, message); - this.capability = capability; - } - - public String getCapability() { - return capability; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/DownloadURLIterable.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/DownloadURLIterable.java deleted file mode 100644 index 8f4b99d0daad..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/DownloadURLIterable.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import org.graalvm.component.installer.remote.RemoteComponentParam; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.file.Path; -import java.util.Iterator; -import org.graalvm.component.installer.FileIterable.FileComponent; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.MetadataLoader; - -public class DownloadURLIterable extends AbstractIterable { - - public DownloadURLIterable(Feedback feedback, CommandInput input) { - super(input, feedback); - } - - @Override - public Iterator iterator() { - return new It(); - } - - @Override - public ComponentIterable matchVersion(Version.Match m) { - return this; - } - - @Override - public ComponentIterable allowIncompatible() { - return this; - } - - class It implements Iterator { - - @Override - public boolean hasNext() { - return input.hasParameter(); - } - - @Override - public ComponentParam next() { - String s = input.nextParameter(); - URL u; - try { - u = SystemUtils.toURL(s); - } catch (MalformedURLException ex) { - throw feedback.failure("URL_InvalidDownloadURL", ex, s, ex.getLocalizedMessage()); - } - boolean progress = input.optValue(Commands.OPTION_NO_DOWNLOAD_PROGRESS) == null; - RemoteComponentParam p = new DownloadURLParam(u, s, s, feedback, progress); - p.setVerifyJars(isVerifyJars()); - return p; - } - } - - static class DownloadURLParam extends RemoteComponentParam { - - DownloadURLParam(URL remoteURL, String dispName, String spec, Feedback feedback, boolean progress) { - super(remoteURL, dispName, spec, feedback, progress); - } - - @Override - protected MetadataLoader metadataFromLocal(Path localFile) throws IOException { - FileComponent fc = new FileComponent(localFile.toFile(), isVerifyJars(), - SystemUtils.fingerPrint(getDownloader().getReceivedDigest(), false), getFeedback()); - return fc.createFileLoader(); - } - - @Override - public ComponentInfo completeMetadata() throws IOException { - return createFileLoader().completeMetadata(); - } - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Environment.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Environment.java deleted file mode 100644 index 249d0f6828f9..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Environment.java +++ /dev/null @@ -1,639 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.Console; -import java.io.EOFException; -import java.io.IOException; -import java.io.InputStream; -import org.graalvm.component.installer.model.ComponentRegistry; -import java.io.PrintStream; -import java.net.URL; -import java.nio.file.Path; -import java.text.MessageFormat; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.ResourceBundle; -import java.util.function.Supplier; - -/** - * Implementation of feedback and input for commands. - */ -@SuppressWarnings("this-escape") -public class Environment implements Feedback, CommandInput, Config { - private static final ResourceBundle BUNDLE = ResourceBundle.getBundle( - "org.graalvm.component.installer.Bundle"); - - private final String commandName; - private final LinkedList parameters; - private final Map options; - private final boolean verbose; - private final ResourceBundle bundle; - private int parameterPos; - private InputStream in = System.in; - private PrintStream err = System.err; - private PrintStream out = System.out; - private ComponentRegistry localRegistry; - private boolean stacktraces; - private ComponentIterable fileIterable; - private final Map fileMap = new HashMap<>(); - private final Map>> responseHeadersMap = new HashMap<>(); - private boolean allOutputToErr; - private boolean autoYesEnabled; - private boolean nonInteractive; - private boolean silent; - private Path graalHome; - private FileOperations fileOperations; - private CatalogFactory catalogFactory; - private ComponentCatalog componentCatalog; - - Environment(String commandName, List parameters, Map options) { - this(commandName, (String) null, parameters, options); - } - - Environment(String commandName, InstallerCommand cmdInstance, List parameters, Map options) { - this(commandName, makeBundle(cmdInstance), parameters, options); - } - - public void setIn(InputStream input) { - this.in = input; - } - - private static String makeBundle(InstallerCommand cmdInstance) { - if (cmdInstance == null) { - return null; - } - String s = cmdInstance.getClass().getName(); - s = s.substring(0, s.lastIndexOf('.')); - return s; - } - - public Environment(String commandName, String bundlePackage, List parameters, Map options) { - this.commandName = commandName; - this.parameters = new LinkedList<>(parameters); - this.options = options; - this.verbose = options.containsKey(Commands.OPTION_VERBOSE); - this.stacktraces = options.containsKey(Commands.OPTION_DEBUG); - if (bundlePackage != null) { - bundle = ResourceBundle.getBundle(bundlePackage + ".Bundle"); // NOI18N - } else { - bundle = BUNDLE; - } - - this.fileIterable = new FileIterable(this, this); - } - - @Override - public Environment enableStacktraces() { - this.stacktraces = true; - return this; - } - - @Override - public boolean isAutoYesEnabled() { - return autoYesEnabled; - } - - @Override - public void setAutoYesEnabled(boolean autoYesEnabled) { - this.autoYesEnabled = autoYesEnabled; - } - - @Override - public boolean isNonInteractive() { - return nonInteractive; - } - - @Override - public void setNonInteractive(boolean nonInteractive) { - this.nonInteractive = nonInteractive; - } - - public boolean isAllOutputToErr() { - return allOutputToErr; - } - - @Override - public void setAllOutputToErr(boolean allOutputToErr) { - this.allOutputToErr = allOutputToErr; - if (allOutputToErr) { - out = err; - } else { - out = System.out; - } - } - - @Override - public void setFileIterable(ComponentIterable fileIterable) { - this.fileIterable = fileIterable; - } - - @Override - public void setCatalogFactory(CatalogFactory catalogFactory) { - this.catalogFactory = catalogFactory; - } - - @Override - public ComponentCatalog getRegistry() { - if (componentCatalog == null) { - componentCatalog = catalogFactory.createComponentCatalog(this); - } - return componentCatalog; - } - - @Override - public ComponentRegistry getLocalRegistry() { - return localRegistry; - } - - public void setLocalRegistry(ComponentRegistry r) { - this.localRegistry = r; - } - - public void setGraalHome(Path f) { - this.graalHome = f.normalize(); - - } - - public void setErr(PrintStream err) { - this.err = err; - } - - public void setOut(PrintStream out) { - this.out = out; - } - - @Override - public void error(String bundleKey, Throwable error, Object... args) { - error(bundleKey, bundle, error, args); - } - - private void error(String bundleKey, ResourceBundle srcBundle, Throwable error, Object... args) { - boolean wasSilent = setSilent(false); - print(false, srcBundle, err, bundleKey, args); - if (stacktraces && error != null) { - error.printStackTrace(err); - } - setSilent(wasSilent); - } - - /** - * Wraps the error into a {@link FailedOperationException}. - * - * @param bundleKey - * @param error - * @param args - * @return exception which can be thrown - */ - @Override - public RuntimeException failure(String bundleKey, Throwable error, Object... args) { - return new FailedOperationException(createMessage(bundle, bundleKey, args), error); - } - - @Override - public void message(String bundleKey, Object... args) { - print(false, bundle, err, bundleKey, args); - } - - @Override - public boolean verbosePart(String bundleKey, Object... args) { - if (bundleKey != null) { - print(true, false, bundle, out, bundleKey, args); - } - return verbose; - } - - @Override - public void output(String bundleKey, Object... args) { - print(false, bundle, out, bundleKey, args); - } - - @Override - public void outputPart(String bundleKey, Object... args) { - print(false, false, bundle, out, bundleKey, args); - } - - @Override - public boolean verboseOutput(String bundleKey, Object... args) { - if (bundleKey != null) { - print(true, bundle, out, bundleKey, args); - } - return verbose; - } - - @Override - public String l10n(String bundleKey, Object... args) { - return createMessage(bundle, bundleKey, args); - } - - @Override - public boolean verbatimOut(String msg, boolean beVerbose) { - print(beVerbose, true, null, out, msg); - return beVerbose; - } - - @Override - public boolean verbatimPart(String msg, boolean beVerbose) { - print(beVerbose, false, null, out, msg); - return beVerbose; - } - - @Override - public boolean verbatimPart(String msg, boolean error, boolean beVerbose) { - print(beVerbose, false, null, error ? err : out, msg); - return beVerbose; - } - - @Override - public boolean backspace(int chars, boolean beVerbose) { - if (beVerbose && !verbose) { - return false; - } - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < chars; i++) { - sb.append('\b'); - } - verbatimPart(sb.toString(), beVerbose); - return verbose; - } - - @Override - public Feedback withBundle(Class clazz) { - String s = clazz.getName(); - s = s.substring(0, s.lastIndexOf('.')); - ResourceBundle localBundle = ResourceBundle.getBundle(s + ".Bundle"); // NOI18N - - return new Feedback() { - @Override - public void message(String bundleKey, Object... params) { - print(false, localBundle, err, bundleKey, params); - } - - @Override - public void output(String bundleKey, Object... params) { - print(false, localBundle, out, bundleKey, params); - } - - @Override - public boolean verbosePart(String bundleKey, Object... params) { - if (bundleKey != null) { - print(true, false, localBundle, out, bundleKey, params); - } - return verbose; - } - - @Override - public boolean verboseOutput(String bundleKey, Object... params) { - if (bundleKey != null) { - print(true, localBundle, out, bundleKey, params); - } - return verbose; - } - - @Override - public boolean verbatimOut(String msg, boolean verboseOutput) { - print(verboseOutput, null, out, msg); - return verboseOutput; - } - - @Override - public void error(String key, Throwable t, Object... params) { - Environment.this.error(key, localBundle, t, params); - } - - @Override - public String l10n(String key, Object... params) { - return createMessage(localBundle, key, params); - } - - @Override - public RuntimeException failure(String key, Throwable t, Object... params) { - return new FailedOperationException(createMessage(localBundle, key, params), t); - } - - @Override - public Feedback withBundle(Class anotherClazz) { - return Environment.this.withBundle(anotherClazz); - } - - @Override - public void outputPart(String bundleKey, Object... params) { - print(false, false, localBundle, out, bundleKey, params); - } - - @Override - public boolean verbatimPart(String msg, boolean verboseOutput) { - print(verboseOutput, false, null, out, msg); - return verbose; - } - - @Override - public boolean verbatimPart(String msg, boolean error, boolean verboseOutput) { - print(verboseOutput, false, null, error ? err : out, msg); - return verbose; - } - - @Override - public boolean backspace(int chars, boolean beVerbose) { - return Environment.this.backspace(chars, beVerbose); - } - - @Override - public String acceptLine(boolean autoYes) { - return Environment.this.acceptLine(autoYes); - } - - @Override - public char[] acceptPassword() { - return Environment.this.acceptPassword(); - } - - @Override - public void addLocalFileCache(URL location, Path local) { - Environment.this.addLocalFileCache(location, local); - } - - @Override - public Path getLocalCache(URL location) { - return Environment.this.getLocalCache(location); - } - - @Override - public boolean isNonInteractive() { - return Environment.this.isNonInteractive(); - } - - @Override - public boolean isSilent() { - return Environment.this.isSilent(); - } - - @Override - public boolean setSilent(boolean silent) { - return Environment.this.setSilent(silent); - } - - @Override - public void addLocalResponseHeadersCache(URL location, Map> local) { - Environment.this.addLocalResponseHeadersCache(location, local); - } - - @Override - public Map> getLocalResponseHeadersCache(URL location) { - return Environment.this.getLocalResponseHeadersCache(location); - } - }; - } - - @SuppressWarnings({"unchecked"}) - private static String createMessage(ResourceBundle bundle, String bundleKey, Object... args) { - if (bundle == null) { - return bundleKey; - } - if (args == null) { - return bundle.getString(bundleKey); - } - for (int i = 0; i < args.length; i++) { - Object o = args[i]; - if (o instanceof Supplier) { - Object v = ((Supplier) o).get(); - if (v == null || v instanceof String) { - args[i] = v; - } - } - } - if (bundleKey == null) { - return String.valueOf(args[0]); - } - return MessageFormat.format( - bundle.getString(bundleKey), - args); - } - - private void print(boolean beVerbose, ResourceBundle msgBundle, PrintStream stm, String bundleKey, Object... args) { - if (beVerbose && !this.verbose) { - return; - } - print(beVerbose, true, msgBundle, stm, bundleKey, args); - } - - private void print(boolean beVerbose, boolean addNewline, ResourceBundle msgBundle, PrintStream stm, String bundleKey, Object... args) { - if (silent || (beVerbose && !this.verbose)) { - return; - } - if (addNewline) { - stm.println(createMessage(msgBundle, bundleKey, args)); - stm.flush(); - } else { - stm.print(createMessage(msgBundle, bundleKey, args)); - stm.flush(); - } - } - - @Override - public Path getGraalHomePath() { - return graalHome; - } - - @Override - public String nextParameter() { - if (parameterPos >= parameters.size()) { - return null; - } - return parameters.get(parameterPos++); - } - - @Override - public String peekParameter() { - if (parameterPos >= parameters.size()) { - return null; - } - return parameters.get(parameterPos); - } - - @Override - public String requiredParameter() { - if (!hasParameter()) { - throw new FailedOperationException( - MessageFormat.format(BUNDLE.getString("ERROR_MissingParameter"), commandName)); - } - return nextParameter(); - } - - @Override - public boolean hasParameter() { - return parameters.size() > parameterPos; - } - - @Override - public ComponentIterable existingFiles() { - return fileIterable; - } - - @Override - public String optValue(String optName) { - return options.get(optName); - } - - public char acceptCharacter() { - try { - int input = in.read(); - if (input == -1) { - throw new UserAbortException(); - } - return (char) input; - } catch (EOFException ex) { - throw new UserAbortException(ex); - } catch (IOException ex) { - throw withBundle(Environment.class).failure("ERROR_UserInput", ex, ex.getMessage()); - } - } - - @Override - public String acceptLine(boolean autoYes) { - if (autoYes && isAutoYesEnabled()) { - return AUTO_YES; - } - if (isNonInteractive()) { - throw new NonInteractiveException(withBundle(Environment.class).l10n("ERROR_NoninteractiveInput")); - } - StringBuilder sb = new StringBuilder(); - char c; - while ((c = acceptCharacter()) != '\n') { - if (c == 0x08) { - sb.delete(sb.length() - 1, sb.length()); - } else { - sb.append(c); - } - } - if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '\r') { - sb.delete(sb.length() - 1, sb.length()); - } - return sb.toString(); - } - - @Override - public char[] acceptPassword() { - if (isNonInteractive()) { - throw new NonInteractiveException(withBundle(Environment.class).l10n("ERROR_NoninteractiveInput")); - } - Console console = System.console(); - if (console != null) { - console.flush(); - return console.readPassword(); - } else { - return acceptLine(false).toCharArray(); - } - } - - @Override - public void addLocalFileCache(URL location, Path local) { - fileMap.put(location, local); - } - - @Override - public Path getLocalCache(URL location) { - return fileMap.get(location); - } - - @Override - public void addLocalResponseHeadersCache(URL location, Map> local) { - responseHeadersMap.put(location, local); - } - - @Override - public Map> getLocalResponseHeadersCache(URL location) { - return responseHeadersMap.get(location); - } - - @Override - public FileOperations getFileOperations() { - return fileOperations; - } - - public void setFileOperations(FileOperations fileOperations) { - this.fileOperations = fileOperations; - } - - public boolean close() throws IOException { - if (out != null) { - out.flush(); - } - if (err != null) { - err.flush(); - } - if (fileOperations != null) { - return fileOperations.flush(); - } else { - return false; - } - } - - @Override - public CatalogFactory getCatalogFactory() { - return catalogFactory; - } - - public void resetParameters() { - parameterPos = 0; - } - - @Override - public String getParameter(String key, boolean cmdLine) { - if (cmdLine) { - return System.getProperty(key); - } else { - return System.getenv(key.toUpperCase(Locale.ENGLISH)); - } - } - - @Override - public Map parameters(boolean cmdLine) { - if (cmdLine) { - Map res = new HashMap<>(); - for (String s : System.getProperties().stringPropertyNames()) { - res.put(s, System.getProperty(s)); - } - return res; - } else { - return System.getenv(); - } - } - - @Override - public boolean isSilent() { - return silent; - } - - @Override - public boolean setSilent(boolean silent) { - boolean wasSilent = this.silent; - this.silent = silent; - return wasSilent; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FailedOperationException.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FailedOperationException.java deleted file mode 100644 index e43b7c2ca125..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FailedOperationException.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * General wrapping exception for conditions that should terminate the installation process. As a - * rule, errors identified by the Installer should throw this exception. The installer code should - * not throw IOExceptions for anything except real I/O operations. - */ -public class FailedOperationException extends InstallerStopException { - - private static final long serialVersionUID = 1L; - - public FailedOperationException(String message) { - super(message); - } - - public FailedOperationException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Feedback.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Feedback.java deleted file mode 100644 index 527defa07979..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Feedback.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.net.URL; -import java.nio.file.Path; -import java.util.List; -import java.util.Map; - -/** - * Centralizes feedback from individual commands. Allows to centrally handle verbosity, stacktraces - * of exceptions etc. Allows to work with different Bundles. - */ -public interface Feedback { - /** - * Returned from {@link #acceptLine} for an automatic accept. - */ - String AUTO_YES = ""; - - /** - * Formats a message on stderr. - * - * @param bundleKey key into the bundle - * @param params optional positional arguments for the message - */ - void message(String bundleKey, Object... params); - - /** - * Formats a message on stdout. - * - * @param bundleKey key into the bundle - * @param params optional positional arguments for the message - */ - void output(String bundleKey, Object... params); - - /** - * Formats a message on stdout; will not print a newline. - * - * @param bundleKey key into the bundle - * @param params optional positional arguments for the message - */ - void outputPart(String bundleKey, Object... params); - - /** - * Formats a verbosePart-level message on stderr. Returns a flag indicating the verbosePart - * level is on - use to bypass verbosePart messages. - *

- * {code null} bundle key can be used to test verbose flag - * - * @param bundleKey key into the bundle, or {@code null} to just return the verbose flag - * @param params optional positional arguments for the message - * @return {@code true}, if the verbosePart message level is on. - */ - boolean verbosePart(String bundleKey, Object... params); - - /** - * Formats a verbosePart-level message on stdout. Returns a flag indicating the verbosePart - * level is on - use to bypass verbosePart messages. - *

- * {code null} bundle key can be used to test verbose flag - * - * @param bundleKey key into the bundle, or {@code null} to just return the verbose flag - * @param params optional positional arguments for the message - * @return {@code true}, if the verbosePart message level is on. - */ - boolean verboseOutput(String bundleKey, Object... params); - - /** - * Formats an error message on stderr. Depending on settings, the exception stacktrace may be - * printed. - * - * @param bundleKey key into the bundle - * @param params optional positional arguments for the message - * @param t thrown exception. - */ - void error(String bundleKey, Throwable t, Object... params); - - /** - * Formats a message using the bundle. - * - * @param bundleKey key into the bundle - * @param params optional positional arguments for the message - * @return formatted message - */ - String l10n(String bundleKey, Object... params); - - /** - * Reports a message with possible Throwable and wraps it into a - * {@link FailedOperationException}. The caller may directly {@code throw} the result. - * - * @param bundleKey key into the bundle - * @param params optional positional arguments for the message - * @param t thrown exception. - */ - RuntimeException failure(String bundleKey, Throwable t, Object... params); - - /** - * Produces a Feedback instance, which uses different Bundle. Bundle is taken from the package - * of the "clazz". - * - * @param clazz reference class to locate the budle - * @return Feedback which translates through the Bundle - */ - Feedback withBundle(Class clazz); - - /** - * Prints a verbatim message. - * - * @param msg prints the message verbatim - * @param verbose true, if this is only verbosePart - */ - boolean verbatimOut(String msg, boolean verbose); - - boolean verbatimPart(String msg, boolean verbose); - - boolean verbatimPart(String msg, boolean error, boolean verbose); - - boolean backspace(int chars, boolean beVerbose); - - boolean isNonInteractive(); - - boolean isSilent(); - - boolean setSilent(boolean silent); - - default void suppressSilent(Runnable run) { - boolean wasSilent = setSilent(false); - try { - run.run(); - } finally { - setSilent(wasSilent); - } - } - - /** - * Waits for user input confirmed by ENTER. - * - * @param autoYes returns the {@link #AUTO_YES} if yes-to-all was specified on commandline. - * @return accepted line. - */ - String acceptLine(boolean autoYes); - - /** - * Allows to enter password using console services. - * - * @return password - */ - char[] acceptPassword(); - - /** - * Provides a cache for remote files. The URL contents should be downloaded and stored to the - * `local` file. The file should be marked with {@link java.io.File#deleteOnExit()}. - * - * @param location remote location - * @param local locally cached content - */ - void addLocalFileCache(URL location, Path local); - - /** - * Returns a local cache for the location. Returns {@code null}, if the content is not locally - * available. - * - * @param location the remote location - * @return locally stored content or {@code null}. - */ - Path getLocalCache(URL location); - - /** - * Provides a cache for remote files response headers. - * - * @param location remote location - * @param local locally response headers - */ - void addLocalResponseHeadersCache(URL location, Map> local); - - /** - * Returns a local response headers cache for the location. Returns {@code null}, if the content - * is not locally available. - * - * @param location the remote location - * @return locally stored response headers or {@code null}. - */ - Map> getLocalResponseHeadersCache(URL location); -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FileIterable.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FileIterable.java deleted file mode 100644 index 285173483fbb..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FileIterable.java +++ /dev/null @@ -1,159 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.File; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel; -import java.nio.channels.ReadableByteChannel; -import java.nio.file.StandardOpenOption; -import java.util.Iterator; -import java.util.ServiceLoader; -import org.graalvm.component.installer.persist.MetadataLoader; - -public class FileIterable extends AbstractIterable { - public FileIterable(CommandInput input, Feedback fb) { - super(input, fb); - } - - private File getFile(String pathSpec) { - File f = new File(pathSpec); - if (f.exists()) { - return f; - } - throw feedback.failure("ERROR_MissingFile", null, pathSpec); - } - - @Override - public Iterator iterator() { - return new Iterator<>() { - @Override - public boolean hasNext() { - return input.hasParameter(); - } - - @Override - public ComponentParam next() { - return new FileComponent(getFile(input.requiredParameter()), isVerifyJars(), null, feedback); - } - }; - } - - public static class FileComponent implements ComponentParam { - private final File localFile; - private MetadataLoader loader; - private final boolean verifyJars; - private final Feedback feedback; - private final String serial; - - /** - * Creates a file-based component. - * - * @param localFile local file to load from - * @param verifyJars true, if the jar signature should be verified - * @param serial serial / tag of the component; if {@code null}, will be computed as sha256 - * hash. - * @param feedback output - */ - public FileComponent(File localFile, boolean verifyJars, String serial, Feedback feedback) { - this.localFile = localFile; - this.verifyJars = verifyJars; - this.serial = serial; - this.feedback = feedback.withBundle(FileComponent.class); - } - - @Override - public MetadataLoader createMetaLoader() throws IOException { - if (loader != null) { - return loader; - } - byte[] fileStart = null; - String ser; - - if (localFile.isFile()) { - try (ReadableByteChannel ch = FileChannel.open(localFile.toPath(), StandardOpenOption.READ)) { - ByteBuffer bb = ByteBuffer.allocate(8); - ch.read(bb); - fileStart = bb.array(); - } - if (serial != null) { - ser = serial; - } else { - ser = SystemUtils.fingerPrint(SystemUtils.computeFileDigest(localFile.toPath(), null), false); - } - } else { - fileStart = new byte[]{0, 0, 0, 0, 0, 0, 0, 0}; - ser = ""; - } - - for (ComponentArchiveReader provider : ServiceLoader.load(ComponentArchiveReader.class)) { - MetadataLoader ldr = provider.createLoader(localFile.toPath(), fileStart, ser, feedback, verifyJars); - if (ldr != null) { - loader = ldr; - return ldr; - } - } - throw feedback.failure("ERROR_UnknownFileFormat", null, localFile.toString()); - } - - @Override - public void close() throws IOException { - if (loader != null) { - loader.close(); - } - } - - @Override - public MetadataLoader createFileLoader() throws IOException { - return createMetaLoader(); - } - - @Override - public boolean isComplete() { - return true; - } - - @Override - public String getSpecification() { - return localFile.toString(); - } - - @Override - public String getDisplayName() { - return localFile.toString(); - } - - @Override - public String getFullPath() { - return localFile.getAbsolutePath(); - } - - @Override - public String getShortName() { - return localFile.getName(); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FileOperations.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FileOperations.java deleted file mode 100644 index 6bd0deca6687..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/FileOperations.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.AccessDeniedException; -import java.nio.file.FileSystemException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import java.nio.file.attribute.PosixFilePermission; -import java.util.Set; -import java.util.concurrent.Callable; -import org.graalvm.component.installer.os.DefaultFileOperations; -import org.graalvm.component.installer.os.WindowsFileOperations; -import org.graalvm.nativeimage.ImageInfo; - -/** - * - * @author sdedic - */ -public abstract class FileOperations { - private Feedback feedback; - private Path rootPath; - - public void init(Feedback fb) { - this.feedback = fb; - } - - protected final Feedback feedback() { - return feedback; - } - - protected final Path rootPath() { - return rootPath; - } - - public abstract boolean flush() throws IOException; - - /** - * Materializes the path. The input path is relative to the root; the path will be resolved - * against the root. Then, if copy-on-write was performed, the path will be redirected to a - * sibling directory. - * - * @param p the path to materialize - * - * @return the target path or {@code null} - */ - @SuppressWarnings("unused") - public Path materialize(Path p, boolean write) { - return p; - } - - protected void performDelete(Path p) throws IOException { - Files.deleteIfExists(p); - } - - protected abstract boolean doWithPermissions(Path p, Callable action) throws IOException; - - @SuppressWarnings("unused") - protected void handleUndeletableFile(IOException ex, Path p) throws IOException { - throw ex; - } - - @SuppressWarnings("unused") - protected Path handleUnmodifiableFile(IOException ex, Path p, InputStream content) throws IOException { - throw ex; - } - - private void deleteOneFile(Path p, Path rp) throws IOException { - try { - if (p.equals(rp)) { - return; - } - performDelete(p); - } catch (AccessDeniedException ex) { - if (!doWithPermissions(p, () -> { - performDelete(p); - return null; - })) { - throw ex; - } - } catch (FileSystemException ex) { - handleUndeletableFile(ex, p); - } - } - - /** - * Deletes a path relative to the installation root. - *

- * If the operation fails, the implementation will create a sibling of the owning - * directory and copies all files into it, preserving timestamps and access rights, if - * possible. The file to be deleted will not be added to the copied directory. - *

- *

- * Although the delete fails, if the copy-on-write succeeds, the operation reports overall - * success. - * - * @param p path to delete - * @throws IOException - */ - public void deleteFile(Path p) throws IOException { - deleteOneFile(p, rootPath); - } - - protected void performInstall(Path target, InputStream contents) throws IOException { - Files.copy(contents, target, StandardCopyOption.REPLACE_EXISTING); - } - - /** - * Installs a file, potentially replacing an existing file. - * - * @param target - * @throws IOException - */ - public Path installFile(Path target, InputStream contents) throws IOException { - Path ret = target; - try { - performInstall(target, contents); - } catch (AccessDeniedException ex) { - doWithPermissions(target, () -> { - performInstall(target, contents); - return null; - }); - } catch (FileSystemException ex) { - ret = handleUnmodifiableFile(ex, target, contents); - } - return ret; - } - - public Path getRootPath() { - return rootPath; - } - - public void setRootPath(Path rootPath) { - this.rootPath = rootPath; - } - - public abstract void setPermissions(Path target, Set perms) throws IOException; - - public static FileOperations createPlatformInstance(Feedback f, Path rootPath) { - FileOperations inst; - if (SystemUtils.isWindows()) { - WindowsFileOperations w = new WindowsFileOperations(); - inst = w; - if (!ImageInfo.inImageCode()) { - w.setDelayDeletedList(SystemUtils.fromUserString(System.getenv(CommonConstants.ENV_DELETE_LIST))); - w.setCopyContents(SystemUtils.fromUserString(System.getenv(CommonConstants.ENV_COPY_CONTENTS))); - } - } else { - inst = new DefaultFileOperations(); - } - inst.init(f); - inst.setRootPath(rootPath); - return inst; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/GenerateCatalog.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/GenerateCatalog.java deleted file mode 100644 index d198e3a6f114..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/GenerateCatalog.java +++ /dev/null @@ -1,478 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.jar.Attributes; -import java.util.jar.JarFile; -import java.util.jar.Manifest; -import static org.graalvm.component.installer.BundleConstants.GRAALVM_CAPABILITY; -import org.graalvm.component.installer.jar.JarMetaLoader; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.ComponentPackageLoader; -import org.graalvm.component.installer.remote.FileDownloader; - -/** - * - * @author sdedic - */ -public final class GenerateCatalog { - private List params = new ArrayList<>(); - private List locations = new ArrayList<>(); - private String graalVersionPrefix; - private String graalVersionName; - private String forceVersion; - private String forceOS; - private String forceVariant; - private String forceArch; - private String urlPrefix; - private final StringBuilder catalogContents = new StringBuilder(); - private final StringBuilder catalogHeader = new StringBuilder(); - private Environment env; - private String graalNameFormatString = "GraalVM %s %s%s/%s"; - private String graalVersionFormatString; - - private static final Map OPTIONS = new HashMap<>(); - - private static final String OPT_FORMAT_1 = "1"; // NOI18N - private static final String OPT_FORMAT_2 = "2"; // NOI18N - private static final String OPT_VERBOSE = "v"; // NOI18N - private static final String OPT_GRAAL_PREFIX = "g"; // NOI18N - private static final String OPT_GRAAL_NAME = "n"; // NOI18N - private static final String OPT_GRAAL_NAME_FORMAT = "f"; // NOI18N - private static final String OPT_URL_BASE = "b"; // NOI18N - private static final String OPT_PATH_BASE = "p"; // NOI18N - private static final String OPT_FORCE_VERSION = "e"; // NO18N - private static final String OPT_FORCE_OS = "o"; // NO18N - private static final String OPT_FORCE_VARIANT = "V"; // NO18N - private static final String OPT_FORCE_ARCH = "a"; // NO18N - private static final String OPT_SEARCH_LOCATION = "l"; // NOI18N - - static { - OPTIONS.put(OPT_FORMAT_1, ""); // format v1 < GraalVM 1.0.0-rc16+ - OPTIONS.put(OPT_FORMAT_2, ""); // format v2 = GraalVM 1.0.0-rc16+ - OPTIONS.put(OPT_VERBOSE, ""); // verbose - OPTIONS.put(OPT_GRAAL_PREFIX, "s"); - OPTIONS.put(OPT_FORCE_VERSION, "s"); - OPTIONS.put(OPT_FORCE_OS, "s"); - OPTIONS.put(OPT_FORCE_VARIANT, "s"); - OPTIONS.put(OPT_GRAAL_NAME_FORMAT, "s"); - OPTIONS.put(OPT_GRAAL_NAME, "s"); - OPTIONS.put(OPT_FORCE_ARCH, "s"); - OPTIONS.put(OPT_GRAAL_NAME, ""); // GraalVM release name - OPTIONS.put(OPT_URL_BASE, "s"); // URL Base - OPTIONS.put(OPT_PATH_BASE, "s"); // fileName base - OPTIONS.put(OPT_SEARCH_LOCATION, "s"); // list files - } - - private Map graalVMReleases = new LinkedHashMap<>(); - - public static void main(String[] args) throws IOException { - new GenerateCatalog(args).run(); - System.exit(0); - } - - private GenerateCatalog(String[] args) { - this.params = new ArrayList<>(Arrays.asList(args)); - } - - private static byte[] computeHash(File f) throws IOException { - MessageDigest fileDigest; - try { - fileDigest = MessageDigest.getInstance("SHA-256"); // NOI18N - } catch (NoSuchAlgorithmException ex) { - throw new IOException("Cannot compute digest " + ex.getLocalizedMessage(), ex); - } - ByteBuffer bb = ByteBuffer.allocate(2048); - boolean updated = false; - try ( - InputStream is = new FileInputStream(f); - ReadableByteChannel bch = Channels.newChannel(is)) { - int read; - while (true) { - read = bch.read(bb); - if (read < 0) { - break; - } - bb.flip(); - fileDigest.update(bb); - bb.clear(); - updated = true; - } - } - if (!updated) { - fileDigest.update(new byte[0]); - } - - return fileDigest.digest(); - } - - static String digest2String(byte[] digest) { - StringBuilder sb = new StringBuilder(digest.length * 3); - for (int i = 0; i < digest.length; i++) { - sb.append(String.format("%02x", (digest[i] & 0xff))); - } - return sb.toString(); - } - - static class Spec { - File f; - String u; - String relativePath; - - Spec(File f, String u) { - this.f = f; - this.u = u; - } - } - - static class GraalVersion { - String version; - String os; - String variant; - String arch; - - GraalVersion(String version, String os, String variant, String arch) { - this.version = version; - this.os = os; - this.variant = variant; - this.arch = arch; - } - - } - - private List componentSpecs = new ArrayList<>(); - - private Path pathBase = null; - - public void run() throws IOException { - readCommandLine(); - downloadFiles(); - generateCatalog(); - generateReleases(); - - System.out.println(catalogHeader); - System.out.println(catalogContents); - } - - private void readCommandLine() throws IOException { - SimpleGetopt getopt = new SimpleGetopt(OPTIONS) { - @Override - public RuntimeException err(String messageKey, Object... args) { - ComponentInstaller.printErr(messageKey, args); - System.exit(1); - return null; - } - }.ignoreUnknownCommands(true); - getopt.setParameters(new LinkedList<>(params)); - getopt.process(); - this.env = new Environment(null, getopt.getPositionalParameters(), getopt.getOptValues()); - this.env.setAllOutputToErr(true); - - String pb = env.optValue(OPT_PATH_BASE); - if (pb != null) { - pathBase = SystemUtils.fromUserString(pb).toAbsolutePath(); - } - urlPrefix = env.optValue(OPT_URL_BASE); - graalVersionPrefix = env.optValue(OPT_GRAAL_PREFIX); - if (graalVersionPrefix != null) { - graalVersionName = env.optValue(OPT_GRAAL_NAME); - if (graalVersionName == null) { - throw new IOException("Graal prefix specified, but no human-readable name"); - } - } - forceVersion = env.optValue(OPT_FORCE_VERSION); - forceOS = env.optValue(OPT_FORCE_OS); - forceVariant = env.optValue(OPT_FORCE_VARIANT); - forceArch = env.optValue(OPT_FORCE_ARCH); - if (env.hasOption(OPT_FORMAT_1)) { - formatVer = 1; - } else if (env.hasOption(OPT_FORMAT_2)) { - formatVer = 2; - } - String s = env.optValue(OPT_GRAAL_NAME_FORMAT); - if (s != null) { - graalNameFormatString = s; - } - - switch (formatVer) { - case 1: - graalVersionFormatString = "%s_%s%s_%s"; - break; - case 2: - graalVersionFormatString = "%2$s%3$s_%4$s/%1$s"; - break; - default: - throw new IllegalStateException(); - } - - if (env.hasOption(OPT_SEARCH_LOCATION)) { - Path listFrom = Paths.get(env.optValue("l")); - Files.walk(listFrom).filter((p) -> p.toString().endsWith(".jar")).forEach( - (p) -> locations.add(p.toString())); - } - // process the rest of non-options parameters as locations. - while (env.hasParameter()) { - locations.add(env.nextParameter()); - } - - for (String spec : locations) { - File f = null; - String u = null; - - int eq = spec.indexOf('='); - if (eq != -1) { - f = new File(spec.substring(0, eq)); - if (!f.exists()) { - throw new FileNotFoundException(f.toString()); - } - String uriPart = spec.substring(eq + 1); - u = uriPart; - } else { - f = new File(spec); - if (!f.exists()) { - f = null; - u = spec; - // create a URL, just to fail fast, if the URL is wrong: - URL check = SystemUtils.toURL(spec); - // ... and use it somehow, so ECJ does not fail the gate. - assert check.toString() != null; - } - } - addComponentSpec(f, u); - } - } - - private void addComponentSpec(File f, String u) { - Spec spc = new Spec(f, u); - if (f != null) { - if (pathBase != null) { - spc.relativePath = pathBase.relativize(f.toPath().toAbsolutePath()).toString(); - } - } - componentSpecs.add(spc); - } - - private URL createURL(String spec) throws MalformedURLException { - if (urlPrefix != null) { - return SystemUtils.toURL(urlPrefix, spec); - } else { - return SystemUtils.toURL(spec); - } - } - - private void downloadFiles() throws IOException { - for (Spec spec : componentSpecs) { - if (spec.f == null) { - FileDownloader dn = new FileDownloader(spec.u, createURL(spec.u), env); - dn.setDisplayProgress(true); - dn.download(); - spec.f = dn.getLocalFile(); - } - } - } - - private String os; - private String variant; - private String arch; - private String version; - private int formatVer = 1; - - private String findComponentPrefix(ComponentInfo info) { - Map m = info.getRequiredGraalValues(); - if (graalVersionPrefix != null) { - arch = os = variant = null; - version = graalVersionPrefix; - return graalVersionPrefix; - } - if (forceVersion != null) { - version = forceVersion; - } else { - switch (formatVer) { - case 1: - version = info.getVersionString(); - break; - case 2: - version = info.getVersion().toString(); - break; - } - } - String var = forceVariant != null ? forceVariant : m.get(CommonConstants.CAP_OS_VARIANT); - return String.format(graalVersionFormatString, - version, - os = forceOS != null ? forceOS : m.get(CommonConstants.CAP_OS_NAME), - variant = var == null || var.isEmpty() ? "" : "_" + var, - arch = forceArch != null ? forceArch : m.get(CommonConstants.CAP_OS_ARCH)); - } - - private void generateReleases() { - for (String prefix : graalVMReleases.keySet()) { - GraalVersion ver = graalVMReleases.get(prefix); - String vprefix; - String n; - if (ver.os == null) { - vprefix = graalVersionPrefix; - n = graalVersionName; - } else { - // do not use serial for releases. - vprefix = String.format(graalVersionFormatString, ver.version, ver.os, ver.variant, ver.arch); - n = String.format(graalNameFormatString, ver.version, ver.os, ver.variant, ver.arch); - } - catalogHeader.append(GRAALVM_CAPABILITY).append('.').append(vprefix).append('=').append(n).append('\n'); - if (ver.os == null) { - break; - } - } - } - - private void generateCatalog() throws IOException { - for (Spec spec : componentSpecs) { - File f = spec.f; - byte[] hash = computeHash(f); - String hashString = digest2String(hash); - try (JarFile jf = new JarFile(f)) { - ComponentPackageLoader ldr = new JarMetaLoader(jf, hashString, env); - ComponentInfo info = ldr.createComponentInfo(); - String prefix = findComponentPrefix(info); - if (!graalVMReleases.containsKey(prefix)) { - graalVMReleases.put(prefix, new GraalVersion(version, os, variant, arch)); - } - Manifest mf = jf.getManifest(); - if (mf == null) { - throw new IOException("No manifest in " + spec); - } - String tagString; - - if (formatVer < 2 || info.getTag() == null || info.getTag().isEmpty()) { - tagString = ""; - } else { - // include hash of the file in property prefix. - tagString = "/" + hashString; // NOI18N - } - Attributes atts = mf.getMainAttributes(); - String bid = atts.getValue(BundleConstants.BUNDLE_ID).toLowerCase().replace("-", "_"); - String bl = atts.getValue(BundleConstants.BUNDLE_NAME); - - if (bid == null) { - throw new IOException("Missing bundle id in " + spec); - } - if (bl == null) { - throw new IOException("Missing bundle name in " + spec); - } - String name; - prefix += tagString; - if (spec.u != null) { - name = spec.u.toString(); - } else { - name = spec.relativePath != null ? spec.relativePath : f.getName(); - } - int pos; - while ((pos = name.indexOf("${")) != -1) { - int endPos = name.indexOf("}", pos + 1); - if (endPos == -1) { - break; - } - String key = name.substring(pos + 2, endPos); - String repl = info.getRequiredGraalValues().get(key); - if (repl == null) { - switch (key) { - case "version": - repl = version; - break; - case "os": - repl = os; - break; - case "arch": - repl = arch; - break; - case "comp_version": - repl = info.getVersionString(); - break; - default: - throw new IllegalArgumentException(key); - } - } - if (repl == null) { - throw new IllegalArgumentException(key); - } - String toReplace = "${" + key + "}"; - name = name.replace(toReplace, repl); - } - String url = (urlPrefix == null || urlPrefix.isEmpty()) ? name : urlPrefix + "/" + name; - String sel; - String hashSuffix; - - switch (formatVer) { - case 1: - sel = "Component.{0}.{1}"; - hashSuffix = "-hash"; - break; - case 2: - sel = "Component.{0}/{1}"; - hashSuffix = "-hash"; - break; - default: - throw new IllegalStateException(); - } - catalogContents.append(MessageFormat.format( - sel + "={2}\n", prefix, bid, url)); - catalogContents.append(MessageFormat.format( - sel + hashSuffix + "={2}\n", prefix, bid, hashString)); - - for (Object a : atts.keySet()) { - String key = a.toString(); - String val = atts.getValue(key); - if (key.startsWith("x-GraalVM-Message-")) { // NOI18N - continue; - } - catalogContents.append(MessageFormat.format( - sel + "-{2}={3}\n", prefix, bid, key, val)); - } - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/IncompatibleException.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/IncompatibleException.java deleted file mode 100644 index 4b80e8d3b7b2..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/IncompatibleException.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * - * @author sdedic - */ -public class IncompatibleException extends InstallerStopException { - private static final long serialVersionUID = 23L; - - public IncompatibleException(String message) { - super(message); - } - - public IncompatibleException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/InstallerCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/InstallerCommand.java deleted file mode 100644 index 2533800328f2..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/InstallerCommand.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.IOException; -import java.util.Map; - -/** - * Interface for individual commands. - */ -public interface InstallerCommand { - /** - * Provides supported options for the command. The installer will fail if other options are - * specified on commandline than listed here. Place option specification into the Map under the - * option name's key. Parametrized options are not supported at this moment. Use empty string - * for parameter-less options. - * - * @return supported options - */ - Map supportedOptions(); - - /** - * Executes a command. - * - * @param commandInput access to parameters, options - * @param feedBack output interface, use instead of Stderr, Stdout - */ - void init(CommandInput commandInput, Feedback feedBack); - - /** - * Executes a command. - * - * @throws IOException if file-level operation fails. - */ - int execute() throws IOException; -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/InstallerStopException.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/InstallerStopException.java deleted file mode 100644 index 21d43a840c26..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/InstallerStopException.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Exception which will stop the installer operation. Root of {@link RuntimeException}s, which - * should be reported as "normal errors". Other RuntimeExceptions will be reported as internal - * errors (bugs). - */ -public abstract class InstallerStopException extends RuntimeException { - private static final long serialVersionUID = 1L; - - public InstallerStopException(String message) { - super(message); - } - - public InstallerStopException(String message, Throwable cause) { - super(message, cause); - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/MetadataException.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/MetadataException.java deleted file mode 100644 index 21f8bea56538..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/MetadataException.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Represents a corrupted metadata condition. - */ -public class MetadataException extends InstallerStopException { - private static final long serialVersionUID = 1L; - private final String offendingHeader; - - public MetadataException(String offendingHeader, String message) { - super(message); - this.offendingHeader = offendingHeader; - } - - public String getOffendingHeader() { - return offendingHeader; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/NonInteractiveException.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/NonInteractiveException.java deleted file mode 100644 index 2a81971222f1..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/NonInteractiveException.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Represents a failure when a non-interactive mode required user input. - * - * @author sdedic - */ -public class NonInteractiveException extends InstallerStopException { - private static final long serialVersionUID = 2L; - - public NonInteractiveException(String message) { - super(message); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SimpleGetopt.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SimpleGetopt.java deleted file mode 100644 index 6dd3d56e2cfc..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SimpleGetopt.java +++ /dev/null @@ -1,366 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import static org.graalvm.component.installer.Commands.DO_NOT_PROCESS_OPTIONS; - -/** - * - * @author sdedic - */ -public class SimpleGetopt { - private LinkedList parameters; - private final Map globalOptions; - private final Map> commandOptions = new HashMap<>(); - - private final Map optValues = new HashMap<>(); - private final LinkedList positionalParameters = new LinkedList<>(); - - private String command; - private boolean ignoreUnknownCommands; - private boolean unknownCommand; - - private List unknownOptions; - - private Map abbreviations = new HashMap<>(); - private final Map> commandAbbreviations = new HashMap<>(); - - public SimpleGetopt(Map globalOptions) { - this.globalOptions = globalOptions; - } - - public void setParameters(LinkedList parameters) { - this.parameters = parameters; - } - - public SimpleGetopt ignoreUnknownOptions(boolean ignore) { - this.unknownOptions = ignore ? new ArrayList<>() : null; - return this; - } - - public SimpleGetopt ignoreUnknownCommands(boolean ignore) { - this.ignoreUnknownCommands = ignore; - return this; - } - - public List getUnknownOptions() { - return unknownOptions == null ? Collections.emptyList() : unknownOptions; - } - - // overridable by tests - public RuntimeException err(String messageKey, Object... args) { - throw ComponentInstaller.err(messageKey, args); - } - - private String findCommand(String cmdString) { - String cmd = cmdString; - if (cmd.isEmpty()) { - if (ignoreUnknownCommands) { - return null; - } - throw err("ERROR_MissingCommand"); // NOI18N - } - String selCommand = null; - for (String s : commandOptions.keySet()) { - if (s.startsWith(cmdString)) { - if (selCommand != null) { - throw err("ERROR_AmbiguousCommand", cmdString, selCommand, s); - } - selCommand = s; - if (s.length() == cmdString.length()) { - break; - } - } - } - if (selCommand == null) { - if (ignoreUnknownCommands) { - unknownCommand = true; - command = cmdString; - return null; - } - throw err("ERROR_UnknownCommand", cmdString); // NOI18N - } - command = selCommand; - return command; - } - - private static final String NO_ABBREV = "**no-abbrev"; // NOI18N - - private boolean hasCommand() { - return command != null && !unknownCommand; - } - - @SuppressWarnings("StringEquality") - Map computeAbbreviations(Collection optNames) { - Map result = new HashMap<>(); - - for (String o : optNames) { - if (o.length() < 2) { - continue; - } - result.put(o, NO_ABBREV); - for (int i = 2; i < o.length(); i++) { - String s = o.substring(0, i); - - String fullName = result.get(s); - if (fullName == null) { - result.put(s, o); - } else { - result.put(s, NO_ABBREV); - } - } - } - // final Object noAbbrevMark = NO_ABBREV; - for (Iterator> ens = result.entrySet().iterator(); ens.hasNext();) { - Entry en = ens.next(); - // cannot use comparison to NO_ABBREV directly because of FindBugs + mx gate combo. - if (NO_ABBREV.equals(en.getValue())) { - ens.remove(); - } - } - return result; - } - - Collection getAllOptions() { - Set s = new HashSet<>(); - s.addAll(globalOptions.keySet()); - for (Map cmdOpts : commandOptions.values()) { - s.addAll(cmdOpts.keySet()); - } - // discard short option stubs when only long option exists. - for (Iterator it = s.iterator(); it.hasNext();) { - String opt = it.next(); - if (opt.length() == 1 && !Character.isLetterOrDigit(opt.charAt(0))) { - it.remove(); - } - } - return s; - } - - void computeAbbreviations() { - abbreviations = computeAbbreviations(globalOptions.keySet()); - - for (String c : commandOptions.keySet()) { - Set names = new HashSet<>(commandOptions.get(c).keySet()); - names.addAll(globalOptions.keySet()); - - Map commandAbbrevs = computeAbbreviations(names); - commandAbbreviations.put(c, commandAbbrevs); - } - } - - public void process() { - computeAbbreviations(); - while (true) { - String p = parameters.peek(); - if (p == null) { - break; - } - if (!p.startsWith("-")) { // NOI18N - if (command == null) { - findCommand(parameters.poll()); - Map cOpts = commandOptions.get(command); - if (cOpts != null) { - for (String s : optValues.keySet()) { - if (s.length() > 1) { - continue; - } - if ("X".equals(cOpts.get(s))) { - unknownOption(s, command); - break; - } - } - if (cOpts.containsKey(DO_NOT_PROCESS_OPTIONS)) { // NOI18N - // terminate all processing, the rest are positional params - positionalParameters.addAll(parameters); - break; - } - } else { - positionalParameters.add(p); - } - } else { - positionalParameters.add(parameters.poll()); - } - continue; - } else if (p.length() == 1 || "--".equals(p)) { - // dash alone, or double-dash terminates option search. - parameters.poll(); - positionalParameters.addAll(parameters); - break; - } - String param = parameters.poll(); - boolean nextParam = p.startsWith("--"); // NOI18N - String optName; - int optCharIndex = 1; - while (optCharIndex < param.length()) { - if (nextParam) { - optName = param.substring(2); - param = processOptSpec(optName, optCharIndex, param, nextParam); - } else { - optName = param.substring(optCharIndex, optCharIndex + 1); - optCharIndex += optName.length(); - param = processOptSpec(optName, optCharIndex, param, nextParam); - } - // hack: if "help" option (hardcoded) is present, terminate - if (optValues.get("h") != null) { - return; - } - if (nextParam) { - break; - } - } - } - } - - private void unknownOption(String option, String cmd) { - if (unknownOptions == null) { - if (cmd == null) { - throw err("ERROR_UnsupportedGlobalOption", option); // NOI18N - } else { - throw err("ERROR_UnsupportedOption", option, cmd); // NOI18N - } - } else { - unknownOptions.add(option); - } - - } - - private String processOptSpec(String o, int optCharIndex, String optParam, boolean nextParam) { - String param = optParam; - String optSpec = null; - String optName = o; - Map cmdSpec = null; - - if (hasCommand()) { - Map cmdAbbrevs = commandAbbreviations.get(command); - String fullO = cmdAbbrevs.get(optName); - if (fullO != null) { - optName = fullO; - } - cmdSpec = commandOptions.get(command); - String c = cmdSpec.get(optName); - if (c != null && optName.length() > 1) { - optSpec = cmdSpec.get(c); - optName = c; - } else { - optSpec = c; - } - } - if (optSpec == null) { - String fullO = abbreviations.get(optName); - if (fullO != null) { - optName = fullO; - } - String c = globalOptions.get(optName); - if (c != null && optName.length() > 1) { - optSpec = globalOptions.get(c); - optName = c; - } else { - optSpec = c; - } - } - if (optSpec != null && optSpec.startsWith("=")) { - String s = optSpec.substring(1); - String nspec = null; - if (cmdSpec != null) { - nspec = cmdSpec.get(s); - } - if (nspec == null) { - nspec = globalOptions.get(s); - } - if (nspec != null) { - optSpec = nspec; - optName = s; - } - } - if (optSpec == null) { - if (unknownCommand) { - return param; - } - unknownOption(optName, command); - return param; - } - // no support for parametrized options now - String optVal = ""; - switch (optSpec) { - case "s": - if (nextParam) { - optVal = parameters.poll(); - if (optVal == null) { - throw err("ERROR_OptionNeedsParameter", o, command); // NOI18N - } - } else { - if (optCharIndex < param.length()) { - optVal = param.substring(optCharIndex); - param = ""; - } else if (parameters.isEmpty()) { - throw err("ERROR_OptionNeedsParameter", o, command); // NOI18N - } else { - optVal = parameters.poll(); - } - } - break; - case "X": - unknownOption(o, command); - return param; - case "": - break; - } - optValues.put(optName, optVal); // NOI18N - return param; - } - - public String getCommand() { - return command; - } - - public void addCommandOptions(String commandName, Map optSpec) { - commandOptions.put(commandName, new HashMap<>(optSpec)); - } - - // test only - void addCommandOption(String commandName, String optName, String optVal) { - commandOptions.get(commandName).put(optName, optVal); - } - - public Map getOptValues() { - return optValues; - } - - public LinkedList getPositionalParameters() { - return positionalParameters; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SoftwareChannel.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SoftwareChannel.java deleted file mode 100644 index 5026cba51c26..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SoftwareChannel.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.io.IOException; -import java.util.Collections; -import java.util.Map; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.remote.FileDownloader; - -/** - * An abstraction of software delivery channel. The channel provides a Registry of available - * components. It can augment or change the download process and it can interpret the downloaded - * files to support different file formats. - *

- * - * @author sdedic - */ -public interface SoftwareChannel { - /** - * Loads and provides access to the component registry. - * - * @return registry instance ComponentCollection getRegistry(); - */ - - ComponentStorage getStorage() throws IOException; - - /** - * Configures the downloader with specific options. The downloader may be even replaced with a - * different instance. - * - * @param dn the downloader to configure - * @return the downloader instance. - */ - FileDownloader configureDownloader(ComponentInfo info, FileDownloader dn); - - /* - * Checks if the Component can be installed by native tools. In that case, the installer will - * refuse to operate and displays an appropriate error message - * - * @param info - * - * @return boolean isNativeInstallable(ComponentInfo info); - */ - - interface Factory { - /** - * True, if the channel is willing to handle the URL. URL is passed as a String so that - * custom protocols may be used without registering a URLStreamHandlerFactory. - * - * @param source the definition of the channel including label - * @param input input parameters - * @param output output interface - * @return true, if the channel is willing to work with the URL - */ - SoftwareChannel createChannel(SoftwareChannelSource source, CommandInput input, Feedback output); - - /** - * Adds options to the set of global options. Global options allow to accept specific - * options from commandline, which would otherwise cause an error (unknown option). - * - * @return global options to add. - */ - default Map globalOptions() { - return Collections.emptyMap(); - } - - /** - * Provides help for the injected global options. - * - * @return String to append to the displayed help, or {@code null} for empty message. - */ - default String globalOptionsHelp() { - return null; - } - - void init(CommandInput input, Feedback output); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SoftwareChannelSource.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SoftwareChannelSource.java deleted file mode 100644 index 34b3b45aae49..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SoftwareChannelSource.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.util.HashMap; -import java.util.Map; - -/** - * Description of a component catalog. - * - * @author sdedic - */ -public final class SoftwareChannelSource { - /** - * Access location, represented as String to allow custom protocols without URL protocol - * handler. - */ - private String locationURL; - - /** - * Label for the catalog. - */ - private String label; - - private int priority; - - /** - * Optional parametrs for the software channel. - */ - private Map params = new HashMap<>(); - - public SoftwareChannelSource(String locationURL) { - this.locationURL = SystemUtils.parseURLParameters(locationURL, params); - } - - public SoftwareChannelSource(String locationURL, String label) { - this.locationURL = locationURL; - this.label = label; - } - - public void setLabel(String label) { - this.label = label; - } - - public void setParameter(String param, String value) { - params.put(param, value); - } - - public String getLocationURL() { - return locationURL; - } - - public String getLabel() { - return label; - } - - public String getParameter(String key) { - return params.get(key); - } - - public int getPriority() { - return priority; - } - - public void setPriority(int priority) { - this.priority = priority; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SuppressFBWarnings.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SuppressFBWarnings.java deleted file mode 100644 index 2610de568f9d..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SuppressFBWarnings.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * Used to suppress FindBugs warnings. - */ -public @interface SuppressFBWarnings { - /** - * The set of FindBugs - * warnings that are to be - * suppressed in annotated element. The value can be a bug category, kind or pattern. - */ - String[] value(); - - /** - * Reason why the warning is suppressed. - */ - String justification(); -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SystemUtils.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SystemUtils.java deleted file mode 100644 index dfb6100cb81c..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/SystemUtils.java +++ /dev/null @@ -1,899 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import static org.graalvm.component.installer.CommonConstants.ARCH_AARCH64; -import static org.graalvm.component.installer.CommonConstants.ARCH_AMD64; -import static org.graalvm.component.installer.CommonConstants.ARCH_X8664; -import static org.graalvm.component.installer.CommonConstants.CAP_OS_NAME; -import static org.graalvm.component.installer.CommonConstants.OS_MACOS_DARWIN; -import static org.graalvm.component.installer.CommonConstants.OS_TOKEN_LINUX; -import static org.graalvm.component.installer.CommonConstants.OS_TOKEN_MAC; -import static org.graalvm.component.installer.CommonConstants.OS_TOKEN_MACOS; -import static org.graalvm.component.installer.CommonConstants.OS_TOKEN_WINDOWS; -import static org.graalvm.component.installer.CommonConstants.SYSPROP_ARCH_NAME; -import static org.graalvm.component.installer.CommonConstants.SYSPROP_JAVA_VERSION; -import static org.graalvm.component.installer.CommonConstants.SYSPROP_OS_NAME; -import static java.nio.charset.StandardCharsets.UTF_8; -import java.io.File; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLDecoder; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel; -import java.nio.channels.SeekableByteChannel; -import java.nio.file.FileVisitResult; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.SimpleFileVisitor; -import java.nio.file.StandardCopyOption; -import java.nio.file.StandardOpenOption; -import java.nio.file.attribute.AclFileAttributeView; -import java.nio.file.attribute.BasicFileAttributes; -import java.nio.file.attribute.PosixFileAttributeView; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.graalvm.component.installer.model.ComponentRegistry; -import java.net.URLEncoder; -import java.util.Collection; -import java.util.Locale; - -/** - * - * @author sdedic - */ -public class SystemUtils { - /** - * Path component delimiter. - */ - public static final char DELIMITER_CHAR = '/'; // NOI18N - - /** - * Path component delimiter. - */ - public static final String DELIMITER = "/"; // NOI18N - - private static final String DOT = "."; // NOI18N - - private static final String DOTDOT = ".."; // NOI18N - - private static final String SPLIT_DELIMITER = Pattern.quote(DELIMITER); - - public enum OS { - WINDOWS(OS_TOKEN_WINDOWS), - LINUX(OS_TOKEN_LINUX), - MAC(OS_TOKEN_MACOS), - UNKNOWN(null); - - private final String name; - - public String getName() { - return name; - } - - OS(String name) { - this.name = name; - } - - public static String sysName() { - return System.getProperty(SYSPROP_OS_NAME); - } - - /** - * Obtains current OS enum. - * - * @return OS enum identifier - */ - public static OS get() { - return fromName(sysName()); - } - - public static OS fromName(String osName) { - return osName == null ? UNKNOWN : fromNameLower(osName.toLowerCase(Locale.ENGLISH)); - } - - private static OS fromNameLower(String osNameLower) { - if (!osNameLower.isBlank()) { - if (osNameLower.contains(OS_TOKEN_WINDOWS)) { - return WINDOWS; - } - if (osNameLower.contains(OS_TOKEN_LINUX)) { - return LINUX; - } - if (osNameLower.contains(OS_TOKEN_MAC) || osNameLower.contains(OS_MACOS_DARWIN)) { - return MAC; - } - } - return UNKNOWN; - } - } - - public enum ARCH { - AMD64(ARCH_AMD64), - AARCH64(ARCH_AARCH64), - UNKNOWN(null); - - private final String name; - - public String getName() { - return name; - } - - ARCH(String name) { - this.name = name; - } - - public static String sysName() { - return System.getProperty(SYSPROP_ARCH_NAME); - } - - /** - * Obtain current ARCH enum. - * - * @return ARCH enum identifier - */ - public static ARCH get() { - return fromName(sysName()); - } - - public static ARCH fromName(String archName) { - return archName == null ? UNKNOWN : fromNameLower(archName.toLowerCase(Locale.ENGLISH)); - } - - private static ARCH fromNameLower(String archNameLower) { - if (!archNameLower.isBlank()) { - if (archNameLower.contains(ARCH_AARCH64)) { - return AARCH64; - } - if (archNameLower.contains(ARCH_AMD64) || archNameLower.contains(ARCH_X8664)) { - return AMD64; - } - } - return UNKNOWN; - } - } - - public static boolean nonBlankString(String string) { - return string != null && !string.isBlank(); - } - - /** - * Creates a proper {@link Path} from string representation. The string representation uses - * forward slashes to delimit fileName components. - * - * @param p the fileName specification - * @return Path instance - */ - public static Path fromCommonString(String p) { - String[] comps = p.split(SPLIT_DELIMITER); - if (comps.length == 1) { - return Paths.get(comps[0]); - } - int l = comps.length - 1; - String s = comps[0]; - System.arraycopy(comps, 1, comps, 0, l); - comps[l] = ""; // NOI18N - return Paths.get(s, comps); - } - - /** - * Creates a fileName from user-provided string. It will split the string according to OS - * fileName component delimiter, then fileName the Path instance - * - * @param p user-provided string, with OS-dependent delimiters - * @return Path that correspond to the user-supplied string - */ - public static Path fromUserString(String p) { - return Paths.get(p); - } - - /** - * Sanity check wrapper around {@link Paths#get}. This wrapper checks that the string does NOT - * contain any fileName component delimiter (slash, backslash). - * - * @param s - * @return Path that corresponds to the filename - */ - public static Path fileName(String s) { - if ((s.indexOf(DELIMITER_CHAR) >= 0) || - ((DELIMITER_CHAR != File.separatorChar) && (s.indexOf(File.separatorChar) >= 0))) { - throw new IllegalArgumentException(s); - } - if (DOT.equals(s) || DOTDOT.equals(s)) { - throw new IllegalArgumentException(s); - } - return Paths.get(s); - } - - /** - * Creates a path string using {@link #DELIMITER_CHAR} as a separator. Returns the same values - * on Windows and UNIXes. - * - * @param p path to convert - * @return path string - */ - public static String toCommonPath(Path p) { - StringBuilder sb = new StringBuilder(); - boolean next = false; - for (Path comp : p) { - if (next) { - sb.append(DELIMITER_CHAR); - } - String compS = comp.toString(); - if (File.separatorChar != DELIMITER_CHAR) { - compS = compS.replace(File.separator, DELIMITER); - } - sb.append(compS); - next = true; - } - return sb.toString(); - } - - /** - * Checks if running on Windows. - * - * @return true, if on Windows. - */ - public static boolean isWindows() { - return OS.get().equals(OS.WINDOWS); - } - - /** - * Checks if running on Linux. - * - * @return true, if on Linux. - */ - public static boolean isLinux() { - return OS.get().equals(OS.LINUX); - } - - /** - * Checks if running on Mac. - * - * @return true, if on Mac. - */ - public static boolean isMac() { - return OS.get().equals(OS.MAC); - } - - /** - * Checks if the path is relative and does not go above its root. The path may contain - * {@code ..} components, but they must not traverse outside the relative subtree. - * - * @param p the path, in common notation (slashes) - * @return the path - * @trows IllegalArgumentException if the path is invalid - */ - public static Path fromCommonRelative(String p) { - if (p == null) { - return null; - } - return fromArray(checkRelativePath(null, p)); - } - - private static Path fromArray(String[] comps) { - if (comps.length == 1) { - return Paths.get(comps[0]); - } - int l = comps.length - 1; - String s = comps[0]; - System.arraycopy(comps, 1, comps, 0, l); - comps[l] = ""; // NOI18N - return Paths.get(s, comps); - } - - public static Path resolveRelative(Path baseDir, String p) { - if (baseDir == null) { - return null; - } - if (p == null) { - return null; - } - String[] comps = checkRelativePath(baseDir, p); - return baseDir.resolve(fromArray(comps)); - } - - public static Path fromCommonRelative(Path base, String p) { - if (p == null) { - return null; - } else if (base == null) { - return fromCommonRelative(p); - } - String[] comps = checkRelativePath(base, p); - return base.resolveSibling(fromArray(comps)); - } - - /** - * Resolves a relative path against a base, does not allow the path to go above the base root. - * - * @param base base Path - * @param p path string - * @throws IllegalArgumentException on invalid path - */ - public static void checkCommonRelative(Path base, String p) { - if (p == null) { - return; - } - checkRelativePath(base, p); - } - - private static String[] checkRelativePath(Path base, String p) { - if (p.startsWith(DELIMITER)) { - throw new IllegalArgumentException("Absolute path"); - } - String[] comps = p.split(SPLIT_DELIMITER); - int d = base == null ? 0 : base.normalize().getNameCount() - 1; - int fromIndex = 0; - int toIndex = 0; - for (String s : comps) { - if (s.isEmpty()) { - fromIndex++; - continue; - } - if (DOTDOT.equals(s)) { - d--; - if (d < 0) { - throw new IllegalArgumentException("Relative path reaches above root"); - } - } else { - d++; - } - if (toIndex < fromIndex) { - comps[toIndex] = comps[fromIndex]; - } - fromIndex++; - toIndex++; - } - if (fromIndex == toIndex) { - return comps; - } else { - // return without the empty parts - String[] newcomps = new String[toIndex]; - System.arraycopy(comps, 0, newcomps, 0, toIndex); - return newcomps; - } - } - - private static final Pattern OLD_VERSION_PATTERN = Pattern.compile("([0-9]+\\.[0-9]+(\\.[0-9]+)?(\\.[0-9]+)?)(-([a-z]+)([0-9]+)?)?"); - - /** - * Will transform some widely used formats to RPM-style. Currently it transforms: - *

    - *
  • 1.0.1-dev[.x] => 1.0.1.0-0.dev[.x] - *
  • 1.0.0 => 1.0.0.0 - *
- * - * @param v - * @return normalized version - */ - public static String normalizeOldVersions(String v) { - if (v == null) { - return null; - } - Matcher m = OLD_VERSION_PATTERN.matcher(v); - if (!m.matches()) { - return v; - } - String numbers = m.group(1); - String rel = m.group(5); - String relNo = m.group(6); - - if (numbers.startsWith("0.")) { - return v; - } - - if (rel == null) { - if (m.group(3) == null) { - return numbers + ".0"; - } else { - return numbers; - } - } else { - if (m.group(3) == null) { - numbers = numbers + ".0"; - } - return numbers + "-0." + rel + (relNo == null ? "" : "." + relNo); - } - } - - public static Path getGraalVMJDKRoot(ComponentRegistry reg) { - if (OS.MAC.equals(OS.fromName(reg.getGraalCapabilities().get(CAP_OS_NAME)))) { - return Paths.get("Contents", "Home"); - } else { - return Paths.get(""); - } - } - - /** - * Finds a file owner. On POSIX systems, returns owner of the file. On Windows (ACL fs view) - * returns the owner principal's name. - * - * @param file the file to test - * @return owner name - */ - public static String findFileOwner(Path file) throws IOException { - PosixFileAttributeView posix = file.getFileSystem().provider().getFileAttributeView(file, PosixFileAttributeView.class); - if (posix != null) { - return posix.getOwner().getName(); - } - AclFileAttributeView acl = file.getFileSystem().provider().getFileAttributeView(file, AclFileAttributeView.class); - if (acl != null) { - return acl.getOwner().getName(); - } - return null; - } - - static boolean licenseTracking = false; - - public static boolean isLicenseTrackingEnabled() { - return licenseTracking; - } - - public static String parseURLParameters(String s, Map params) { - int q = s.indexOf('?'); // NOI18N - if (q == -1) { - return s; - } - String queryString = s.substring(q + 1); - for (String parSpec : queryString.split("&")) { // NOI18N - String[] nameAndVal = parSpec.split("="); // NOI18N - String n; - String v; - - n = URLDecoder.decode(nameAndVal[0], UTF_8); - if (n.isEmpty()) { - continue; - } - v = nameAndVal.length > 1 ? URLDecoder.decode(nameAndVal[1], UTF_8) : ""; - params.put(n, v); - } - return s.substring(0, q); - } - - public static int getJavaMajorVersion(CommandInput cmd) { - String v = cmd.getLocalRegistry() != null ? cmd.getLocalRegistry().getJavaVersion() : null; - if (v == null) { - cmd.getParameter(SYSPROP_JAVA_VERSION, true); - } - if (v != null) { - return interpretJavaMajorVersion(v); - } else { - return getJavaMajorVersion(); - } - } - - public static String buildUrlStringWithParameters(String baseURL, Map> params) { - if (params == null || params.isEmpty()) { - return baseURL; - } - StringBuilder url = new StringBuilder(baseURL); - url.append('?'); - for (Map.Entry> entry : params.entrySet()) { - Collection vals = entry.getValue(); - String key = entry.getKey(); - if (key == null || key.isBlank() || vals == null || vals.isEmpty()) { - continue; - } - for (String val : vals) { - url.append(URLEncoder.encode(entry.getKey(), UTF_8)); - url.append('='); - url.append(URLEncoder.encode(val, UTF_8)); - url.append('&'); - } - } - return url.substring(0, url.length() - 1); - } - - public static int getJavaMajorVersion() { - return interpretJavaMajorVersion(System.getProperty(SYSPROP_JAVA_VERSION)); - } - - /** - * Interprets String as a java version, returning the major version number. - * - * @param v the version string - * @return the major version number, or zero if unknown - */ - public static int interpretJavaMajorVersion(String v) { - try { - return Integer.parseInt(v.startsWith("1.") ? v.substring(2) : v); // NOI18N - } catch (NumberFormatException | NullPointerException ex) { - return 0; - } - } - - /** - * Provides the location of jre lib path, optionally the arch-dependent dir. The location - * depends on JDK version. - * - * @param graalPath graalVM installation root - * @param archDir if true, returns the arch-dependent path. - * @return jre lib dir - */ - public static Path getRuntimeLibDir(Path graalPath, boolean archDir) { - Path newLibPath; - Path base = getRuntimeBaseDir(graalPath); - switch (OS.get()) { - case LINUX: - Path temp = base.resolve(Paths.get("lib")); // NOI18N - if (!archDir || SystemUtils.getJavaMajorVersion() >= 10) { - newLibPath = temp; - } else { - newLibPath = temp.resolve(Paths.get(OS.sysName())); - } - break; - case MAC: - newLibPath = base.resolve(Paths.get("lib")); // NOI18N - break; - case WINDOWS: - newLibPath = base.resolve(Paths.get("bin")); // NOI18N - break; - case UNKNOWN: - default: - return null; - } - return newLibPath; - } - - /** - * Returns the JDK's runtime root dir. May be jre or ., depending on Java version - * - * @param jdkInstallDir installation path - * @return runtime path - */ - public static Path getRuntimeBaseDir(Path jdkInstallDir) { - int v = getJavaMajorVersion(); - if (v >= 10) { - return jdkInstallDir; - } else if (v > 0) { - return jdkInstallDir.resolve("jre"); // NOI18N - } - // use fallback: - Path jre = jdkInstallDir.resolve("jre"); // NOI18N - if (Files.exists(jre) && Files.isDirectory(jre)) { - return jre; - } else { - return jdkInstallDir; - } - } - - public static Path copySubtree(Path from, Path to) throws IOException { - Files.walkFileTree(from, new CopyDirVisitor(from, to)); - return to; - } - - public static class CopyDirVisitor extends SimpleFileVisitor { - - private Path fromPath; - private Path toPath; - private StandardCopyOption copyOption; - - public CopyDirVisitor(Path fromPath, Path toPath, StandardCopyOption copyOption) { - this.fromPath = fromPath; - this.toPath = toPath; - this.copyOption = copyOption; - } - - public CopyDirVisitor(Path fromPath, Path toPath) { - this(fromPath, toPath, StandardCopyOption.REPLACE_EXISTING); - } - - @Override - public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) - throws IOException { - - Path targetPath = toPath.resolve(fromPath.relativize(dir)); - if (!Files.exists(targetPath)) { - Files.createDirectory(targetPath); - } - return FileVisitResult.CONTINUE; - } - - @Override - public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) - throws IOException { - - Files.copy(file, toPath.resolve(fromPath.relativize(file)), copyOption); - return FileVisitResult.CONTINUE; - } - } - - public static byte[] toHashBytes(String hashS) { - String val = hashS.trim(); - if (val.length() < 4) { - return null; - } - char c = val.charAt(2); - boolean divided = !((c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f')); // NOI18N - boolean lenOK; - int s; - if (divided) { - lenOK = (val.length() + 1) % 3 == 0; - s = (val.length() + 1) / 3; - } else { - lenOK = (val.length()) % 2 == 0; - s = (val.length() + 1) / 2; - } - if (!lenOK) { - return null; - } - byte[] digest = new byte[s]; - int dI = 0; - for (int i = 0; i + 1 < val.length(); i += 2) { - int b; - try { - b = Integer.parseInt(val.substring(i, i + 2), 16); - } catch (NumberFormatException ex) { - return null; - } - if (b < 0) { - return null; - } - digest[dI++] = (byte) b; - if (divided) { - i++; - } - } - return digest; - } - - /** - * Formats a digest into a String representation. Prints digest bytes in hex, separates bytes by - * doublecolon. - * - * @param digest digest bytes - * @return Strign representation. - */ - public static String fingerPrint(byte[] digest) { - return fingerPrint(digest, true); - } - - /** - * Formats a digest into a String representation. Prints digest bytes in hex, separates bytes by - * doublecolon. - * - * @param digest digest bytes - * @param delimiter if true, put ':' between each two hex digits - * @return Strign representation. - */ - public static String fingerPrint(byte[] digest, boolean delimiter) { - if (digest == null) { - return null; - } - StringBuilder sb = new StringBuilder(digest.length * 3); - for (int i = 0; i < digest.length; i++) { - if (delimiter && i > 0) { - sb.append(':'); - } - sb.append(String.format("%02x", (digest[i] & 0xff))); - } - return sb.toString(); - } - - /** - * Hashes a string contents. - * - * @param s the input text - * @param delimiters use : delimiters in the fingerprint - * @return hex fingerprint of the input text - */ - public static String digestString(String s, boolean delimiters) { - try { - MessageDigest dg = MessageDigest.getInstance("SHA-256"); // NOI18N - dg.update(s.getBytes()); - byte[] digest = dg.digest(); - return SystemUtils.fingerPrint(digest, delimiters); - } catch (NoSuchAlgorithmException ex) { - throw new FailedOperationException(ex.getLocalizedMessage(), ex); - } - } - - public static String patternOsName(String os, String variant) { - if (os == null) { - return null; - } - String lc = os.toLowerCase(Locale.ENGLISH); - String suffix = ""; - if (variant != null && !variant.isEmpty()) { - suffix = "_" + variant.toLowerCase(Locale.ENGLISH); - } - switch (lc) { - case OS_MACOS_DARWIN: - case OS_TOKEN_MACOS: - return String.format("(:?%s%s|%s%s)", OS_MACOS_DARWIN, suffix, OS_TOKEN_MACOS, suffix); - default: - return lc + suffix; - } - } - - public static String patternOsArch(String arch) { - if (arch == null) { - return null; - } - String lc = arch.toLowerCase(Locale.ENGLISH); - switch (lc) { - case ARCH_AMD64: - case ARCH_X8664: - return "(:?" + ARCH_AMD64 + "|" + ARCH_X8664 + ")"; - default: - return lc; - } - } - - /** - * Normalizes architecture string. - * - * @param os OS name - * @param arch arch name - * @return normalized arch name, or {@code null}. - */ - public static String normalizeArchitecture(String os, String arch) { - if (arch == null) { - return null; - } - switch (arch.toLowerCase(Locale.ENGLISH)) { - case ARCH_X8664: - return ARCH_AMD64; - default: - return arch.toLowerCase(Locale.ENGLISH); - } - } - - /** - * Normalizes OS name string. - * - * @param os OS name - * @param arch arch name - * @return normalized os name, or {@code null}. - */ - public static String normalizeOSName(String os, String arch) { - if (os == null) { - return null; - } - switch (os.toLowerCase(Locale.ENGLISH)) { - case OS_MACOS_DARWIN: - return OS_TOKEN_MACOS; - default: - return os.toLowerCase(Locale.ENGLISH); - } - } - - /** - * Computes file digest. The default algorithm is SHA-256 - * - * @param localFile local file path - * @param digestAlgo the hash algorithm - * @return digest bytes - * @throws java.io.IOException in the case of I/O failure, or a digest failure/not found - */ - public static byte[] computeFileDigest(Path localFile, String digestAlgo) throws IOException { - try (SeekableByteChannel s = FileChannel.open(localFile, StandardOpenOption.READ)) { - ByteBuffer bb = ByteBuffer.allocate(4096); - long size = Files.size(localFile); - MessageDigest dg = MessageDigest.getInstance("SHA-256"); // NOI18N - while (size > 0) { - if (bb.limit() > size) { - bb.limit((int) size); - } - int r = s.read(bb); - if (r < 0) { - break; - } - bb.flip(); - dg.update(bb); - bb.clear(); - size -= r; - } - return dg.digest(); - } catch (NoSuchAlgorithmException ex) { - throw new IOException(ex); - } - } - - /** - * Determines if the path is a remote URL. If the passed string is not an absolute URL, attempts - * to interpret as relative path, which checks 'bad characters' and avoids paths that traverse - * above the root. Disallows absolute file:// URLs, URLs from file-based catalogs must be given - * as relative. - * - * @param pathOrURL path or URL to check. - * @return true, if the path is actually a URL. - */ - public static boolean isRemotePath(String pathOrURL) { - try { - URL u = toURL(pathOrURL); - String proto = u.getProtocol(); - if ("file".equals(proto)) { // NOI18N - throw new IllegalArgumentException("Absolute file:// URLs are not permitted."); - } else { - return true; - } - } catch (MalformedURLException ex) { - // expected - } - // will fail with an exception if the relative path contains bad chars or traverses up - fromCommonRelative(pathOrURL); - return false; - } - - /** - * Creates a {@link URI} from a string and converts it to a {@link URL}. Works around the - * deprecation of {@code new URL(String)} in Java 20. - * - * @param url the string to be parsed into a URL - * @return a url - * @throws MalformedURLException wrapper for thrown exceptions - */ - public static URL toURL(String url) throws MalformedURLException { - try { - return new URI(url).toURL(); - } catch (URISyntaxException | IllegalArgumentException ex) { - throw (MalformedURLException) new MalformedURLException().initCause(ex); - } - } - - /** - * Creates a {@link URI} from a first string, resolves the second string against it, and - * converts the result to a {@link URL}. Works around the deprecation of {@code new URL(String)} - * in Java 20. - * - * @param context the string to be parsed into a URL - * @param spec the string to be parsed into a URL in the context of {@code context} - * @return a url - * @throws MalformedURLException wrapper for thrown exceptions - */ - public static URL toURL(String context, String spec) throws MalformedURLException { - try { - return new URI(context).resolve(spec).toURL(); - } catch (URISyntaxException | IllegalArgumentException ex) { - throw (MalformedURLException) new MalformedURLException().initCause(ex); - } - } - - /** - * Converts the given {@link URL} to a {@link URI}, resolves the given string against it, and - * converts the result to a {@link URL}. Works around the deprecation of - * {@code new URL(URL, String)} in Java 20. - * - * @param context the URL to be converted to a URI - * @param spec the string to be resolved - * @return a url - * @throws MalformedURLException wrapper for thrown exceptions - */ - public static URL toURL(URL context, String spec) throws MalformedURLException { - try { - return context.toURI().resolve(spec).toURL(); - } catch (URISyntaxException | IllegalArgumentException ex) { - throw (MalformedURLException) new MalformedURLException().initCause(ex); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/URLConnectionFactory.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/URLConnectionFactory.java deleted file mode 100644 index ce3623c293d4..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/URLConnectionFactory.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer; - -import java.io.IOException; -import java.net.URL; -import java.net.URLConnection; - -/** - * - * @author sdedic - */ -public interface URLConnectionFactory { - URLConnection createConnection(URL u, Configure configCallback) throws IOException; - - @FunctionalInterface - interface Configure { - void accept(URLConnection connection) throws IOException; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/UnknownVersionException.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/UnknownVersionException.java deleted file mode 100644 index 6d36d2dfa5ce..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/UnknownVersionException.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * - * @author sdedic - */ -public class UnknownVersionException extends InstallerStopException { - private static final long serialVersionUID = 33; - - private final transient Version version; - private final transient Version candidate; - - public UnknownVersionException(String s, Version v, Version c) { - super(s); - this.version = v; - this.candidate = c; - } - - public Version getCandidate() { - return candidate; - } - - public Version getVersion() { - return version; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/UserAbortException.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/UserAbortException.java deleted file mode 100644 index 5b00a5b81869..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/UserAbortException.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -/** - * - * @author sdedic - */ -public class UserAbortException extends InstallerStopException { - private static final long serialVersionUID = 1753L; - - public UserAbortException() { - super(null); - } - - public UserAbortException(Throwable cause) { - super(null, cause); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Version.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Version.java deleted file mode 100644 index e010b4e9b60d..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/Version.java +++ /dev/null @@ -1,740 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.Objects; -import java.util.function.Predicate; - -/** - * Version represents a component version. It has the form agreed for Graal product: - * {@code Year.Update.Patch.OneOffChange-release}. Pre-release versions (Year.UpdateX) have their - * Patch version set to 0; so for example 2020.0-0.beta.1 - *

- * "Installation" versions are versions with the same Year.Update.Patch-Release. Each Installation - * version will go to a separate directory. - * - * @author sdedic - */ -public final class Version implements Comparable { - /** - * Represents no version at all. All versions are greater than this one. - */ - public static final Version NO_VERSION = new Version("0.0.0.0", false); - private static final String WILDCARD = "*"; - - private final String versionString; - private final String normalizedString; - private final List releaseParts; - private final List versionParts; - - /** - * Contains wildcard. - */ - private final boolean wildcard; - - /** - * Entered by user, displayed 'as is'. - */ - private final boolean user; - - Version(String versionString, boolean fromUser) throws IllegalArgumentException { - this.versionString = versionString; - - boolean wc = false; - String normalized = fromUser ? versionString : SystemUtils.normalizeOldVersions(versionString); - List vp; - int releaseDash = normalized.indexOf('-'); - if (releaseDash == -1) { - if (fromUser) { - wc = true; - releaseParts = Collections.singletonList(WILDCARD); - } else { - releaseParts = Collections.emptyList(); - } - vp = parseParts(normalized); - } else { - String vS = normalized.substring(0, releaseDash); - String rS = normalized.substring(releaseDash + 1); - vp = parseParts(vS); - List rp = parseParts(rS); - if (fromUser && !rp.isEmpty()) { - String first = rp.get(0); - try { - Integer.parseInt(first); - } catch (NumberFormatException ex) { - // if (rp.size() > 1 && !Character.isDigit(rp.get(1).charAt(0))) { - rp.add(0, WILDCARD); - wc = true; - // } - } - rp.add(WILDCARD); - } - releaseParts = Collections.unmodifiableList(rp); - } - if (vp.size() < 2 || vp.size() > 4 || !Character.isDigit(vp.get(0).charAt(0)) || !Character.isDigit(vp.get(1).charAt(0))) { - throw new IllegalArgumentException("A format Year.Release[.Update[.Patch]] is required. Got: " + versionString); - } - // normalize all, not just releases, as releases are now "-1". - if (vp.size() < 4 && !isOldStyleVersion(vp.get(0))) { - vp = new ArrayList<>(vp); - while (vp.size() < 4) { - vp.add("0"); - } - this.normalizedString = print(vp, releaseParts); - } else { - normalizedString = normalized; - } - versionParts = vp; - wildcard = wc; - user = fromUser; - } - - static boolean isOldStyleVersion(String s) { - try { - // now mainly for ancient test data. PEDNING: update test data. - return Integer.parseInt(s) < 1; - } catch (NumberFormatException ex) { - // expected - return false; - } - } - - static String print(List vParts, List rParts) { - StringBuilder sb = new StringBuilder(); - for (String vp : vParts) { - if (sb.length() > 0) { - sb.append('.'); - } - sb.append(vp); - } - if (!rParts.isEmpty()) { - sb.append('-'); - boolean n = false; - for (String rp : rParts) { - if (n) { - sb.append('.'); - } - sb.append(rp); - n = true; - } - } - return sb.toString(); - } - - Version(String orig, List vParts, List rParts, boolean wc, boolean fromUser) { - this.versionParts = new ArrayList<>(vParts); - this.releaseParts = new ArrayList<>(rParts); - this.versionString = orig != null ? orig : print(vParts, rParts); - if (vParts.size() < 4 && isOldStyleVersion(vParts.get(0))) { - while (versionParts.size() < 4) { - versionParts.add("0"); - } - this.normalizedString = print(versionParts, releaseParts); - } else { - normalizedString = versionString; - } - wildcard = wc; - user = fromUser; - } - - /** - * Returns a Version variant, which can be compared to discover eligible updates. - * - * 1..0-0.beta.1 -> 1..0.x yes 1..0-0.beta.1 -> 1..0-0.rc.1 yes 1..0.0 -> 1..0.1 yes 1..0.0 -> - * 1..1.x no - * - * @return part of version which is the same for all updatable packages. - */ - public Version updatable() { - List vp = new ArrayList<>(versionParts); - vp.subList(3, vp.size()).clear(); - while (vp.size() < 3) { - vp.add("0"); - } - return new Version(null, vp, Collections.emptyList(), false, false); - } - - public Version onlyVersion() { - return new Version(null, versionParts, Collections.emptyList(), false, false); - } - - @Override - public int hashCode() { - int hash = 7; - hash = 43 * hash + Objects.hashCode(this.versionString); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - if (this == NO_VERSION || obj == NO_VERSION) { - // the other must be something else, sorry - return false; - } - final Version other = (Version) obj; - /* - * if (!Objects.equals(this.versionString, other.versionString)) { return false; } return - * true; - */ - return compareTo(other) == 0; - } - - @Override - public String toString() { - return normalizedString; - } - - public String originalString() { - return versionString; - } - - private static List parseParts(String s) throws IllegalArgumentException { - List parts = new ArrayList<>(); - final int l = s.length(); - boolean digit = false; - int lastP = -1; - - for (int i = 0; i < l; i++) { - char c = s.charAt(i); - if (!Character.isLetterOrDigit(c)) { - // separator - if (lastP >= 0) { - parts.add(s.substring(lastP, i)); - lastP = -1; - } - continue; - } - boolean nowDigit = Character.isDigit(c); - if (nowDigit != digit && lastP >= 0) { - parts.add(s.substring(lastP, i)); - lastP = i; - } else if (lastP < 0) { - lastP = i; - } - digit = nowDigit; - } - if (lastP >= 0) { - parts.add(s.substring(lastP)); - } - return parts; - } - - @Override - public int compareTo(Version o) { - if (o == this) { - return 0; - } else if (o == NO_VERSION) { - return 1; - } else if (this == NO_VERSION) { - return -1; - } else if (o == null) { - return 1; - } - int c = compareVersionParts(versionParts, o.versionParts, false); - if (c != 0) { - return c; - } - return compareVersionParts(releaseParts, o.releaseParts, true); - } - - private static int compareVersionParts(List pA, List pB, boolean release) { - Iterator iA = pA.iterator(); - Iterator iB = pB.iterator(); - int res = 0; - String sA = null; - String sB = null; - while ((res == 0) && iA.hasNext() && iB.hasNext()) { - sA = iA.next(); - sB = iB.next(); - res = compareVersionPart(sA, sB); - } - if (res != 0 || !(iA.hasNext() || iB.hasNext())) { - return res; - } - if (iA.hasNext()) { - if (release) { - /* - * if (WILDCARD.equals(iA.next()) || (WILDCARD.equals(sB))) { return 0; } - */ - if (WILDCARD.equals(iA.next()) && !iA.hasNext()) { - return 0; - } - if (WILDCARD.equals(sB)) { - return 0; - } - } - return 1; - } else if (iB.hasNext()) { - if (release) { - if (WILDCARD.equals(iB.next()) && !iB.hasNext()) { - return 0; - } - if (WILDCARD.equals(sA)) { - return 0; - } - // special case: if there's just one part and that one is zero, define it the same - if (pB.size() == 1 && "0".equals(pB.get(0))) { - return 0; - } - } - return -1; - } - throw new IllegalStateException("Should not happen"); // NOI18N - } - - /** - * Compares version parts, RPM-like rules. Acts like a {@link java.util.Comparator}. - * - * @param a first version - * @param b second version. - * @return less than 0, 0 or more than 0, as with Comparator. - */ - public static int compareVersionPart(String a, String b) { - if (WILDCARD.equals(a) || WILDCARD.equals(b)) { - return 0; - } - // handle of the parts == null - if (a == null) { - if (b != null) { - return -1; - } else { - return 0; - } - } else if (b == null) { - return 1; - } - boolean dA = Character.isDigit(a.charAt(0)); - boolean dB = Character.isDigit(a.charAt(0)); - if (dA != dB) { - // numeric part is always later - return dA ? 1 : -1; - } - if (dA && dB) { - int l = a.length() - b.length(); - if (l != 0) { - return l; - } - } - // if at this point dA == dB == true, all numbers have the same length, so we - // can use lexicographic comparison to numeric parts as well. - return a.compareTo(b); - } - - public boolean hasWildcard() { - return wildcard; - } - - public Version installVersion() { - List vps = new ArrayList<>(); - vps.add(versionParts.get(0)); - vps.add(versionParts.get(1)); - if (versionParts.size() > 2) { - vps.add(versionParts.get(2)); - } else { - vps.add("0"); - } - vps.add("0"); - return new Version(null, vps, releaseParts, wildcard, user); - } - - /** - * Produces a 'human readable' version. The intention is to hide complexities of prerelease - * versioning from the poor user. - * - * @return human-readable string. - */ - public String displayString() { - if (user) { - return originalString(); - } - StringBuilder sb = new StringBuilder(); - List vps = new ArrayList<>(versionParts); - if (vps.size() == 4 && "0".equals(vps.get(3))) { // NOI18N - vps.remove(3); - } - for (String vp : vps) { - if (sb.length() > 0) { - sb.append('.'); - } - sb.append(vp); - } - - if (releaseParts.isEmpty()) { - // no release part, no magic - return sb.toString(); - } - String firstRel = releaseParts.get(0); - List printedParts = new ArrayList<>(releaseParts); - try { - Integer.parseInt(firstRel); - printedParts.remove(0); - } catch (NumberFormatException ex) { - } - - if (printedParts.isEmpty()) { - return sb.toString(); - } - - boolean name = false; - boolean next = false; - int patchChar = -1; - sb.append("-"); - for (String s : printedParts) { - if (s.isEmpty() || WILDCARD.equals(s)) { // NOI18N - // skip artifical wildcards - continue; - } - if (Character.isDigit(s.charAt(0))) { - if (next && !name) { - sb.append("."); // NOI18N - } - if (name && patchChar != -1) { - sb.setCharAt(patchChar, '.'); // patch to .nameXX - } - sb.append(s); - name = false; - patchChar = -1; - } else { - patchChar = -1; - if (name) { - // was name, now is also name - sb.append("_"); // NOI18N - } else { - if (next) { - patchChar = sb.length(); - sb.append("-"); // NOI18N - } - } - sb.append(s); - - name = true; - } - next = true; - } - return sb.toString(); - } - - public Match match(Match.Type type) { - return new Match(this, type); - } - - /** - * Parses a new Version object. - * - * @param versionString the String specification of the version - * @return constructed Version object. - */ - public static Version fromString(String versionString) { - return versionString == null ? NO_VERSION : new Version(versionString, false); - } - - public static Version fromUserString(String userVersion) { - return userVersion == null ? NO_VERSION : new Version(userVersion, true); - } - - public static final String EXACT_VERSION = "="; // NOI18N - public static final String GREATER_VERSION = "+"; // NOI18N - public static final String COMPATIBLE_VERSION = "~"; // NOI18N - - /** - * Parses ID and optional version specification into ID and version selector. - * - * @param idSpec ID specification - * @param matchOut the version match - * @return id - */ - public static String idAndVersion(String idSpec, Version.Match[] matchOut) { - int eqIndex = idSpec.indexOf(EXACT_VERSION); - int moreIndex = idSpec.indexOf(GREATER_VERSION); - int compatibleIndex = idSpec.indexOf(COMPATIBLE_VERSION); - int i = -1; - Version.Match.Type type = null; - - if (eqIndex > 0) { - type = Match.Type.EXACT; - i = eqIndex; - } else if (moreIndex > 0) { - type = Match.Type.INSTALLABLE; - i = moreIndex; - } else if (compatibleIndex > 0) { - type = Match.Type.COMPATIBLE; - i = compatibleIndex; - } else { - matchOut[0] = Version.NO_VERSION.match(Match.Type.MOSTRECENT); - return idSpec; - } - matchOut[0] = Version.fromUserString(idSpec.substring(i + 1)).match(type); - return idSpec.substring(0, i); - } - - /** - * Accepts version specification and creates a version filter. - *

- * Version-input must start with "+", "~", "=" or a digit. Non-version inputs will produce - * {@code null}. - *

- *
    - *
  • =version means exactly the version specified ({@link Match.Type#EXACT}) - *
  • +version means the specified version, or above ({@link Match.Type#INSTALLABLE}) - *
  • ~version or version means that version or greater, but within a release range ( - * {@link Match.Type#COMPATIBLE} - *
- * - * @param spec - * @return version match or {@code null}. - */ - public static Version.Match versionFilter(String spec) { - if (spec == null || spec.isEmpty()) { - return null; - } - - int eqIndex = spec.indexOf(EXACT_VERSION); - int moreIndex = spec.indexOf(GREATER_VERSION); - int compatibleIndex = spec.indexOf(COMPATIBLE_VERSION); - int i = -1; - Version.Match.Type type = null; - - if (eqIndex >= 0) { - type = Match.Type.EXACT; - i = eqIndex; - } else if (moreIndex >= 0) { - type = Match.Type.INSTALLABLE; - i = moreIndex; - } else if (compatibleIndex >= 0) { - type = Match.Type.COMPATIBLE; - i = compatibleIndex; - } else { - if (Character.isDigit(spec.charAt(0))) { - return Version.fromString(spec).match(Match.Type.COMPATIBLE); - } else { - return null; - } - } - return Version.fromString(spec.substring(i + 1)).match(type); - } - - public static final class Match implements Predicate { - public enum Type { - /** - * The exact version number. - */ - EXACT, - - /** - * Versions greater or equal than the one defined. - */ - INSTALLABLE, - - /** - * Also greater, but also indicates the most recent one is needed. - */ - MOSTRECENT, - - /** - * Versions compatible. For version r.x.y.z, all versions with the same r.x.y are - * compatible. - */ - COMPATIBLE, - - /** - * Version which is equal or greater. - */ - GREATER, - - /** - * Dependency check. Reverse of {@link #INSTALLABLE}, accepts future versions. - */ - SATISFIES, - - /** - * Dependency check. The tested install version must be the same, and the patchlevel - * must be lower or equal. - */ - SATISFIES_COMPATIBLE, - } - - private final Type matchType; - private final Version version; - - Match(Version version, Type matchType) { - this.matchType = matchType; - this.version = version; - } - - @Override - public boolean test(Version t) { - if (t == null) { - return matchType != Type.EXACT; - } - switch (matchType) { - case EXACT: - return version.equals(t); - - case GREATER: - return version.compareTo(t) <= 0; - - case INSTALLABLE: - return version.installVersion().compareTo(t.installVersion()) <= 0; - - case MOSTRECENT: - throw new IllegalArgumentException(); - - case COMPATIBLE: - return version.installVersion().equals(t.installVersion()); - - case SATISFIES_COMPATIBLE: { - int a = version.installVersion().compareTo(t.installVersion()); - if (a != 0) { - return false; - } - return version.onlyVersion().compareTo(t.onlyVersion()) >= 0; - } - - case SATISFIES: { - int a = version.installVersion().compareTo(t.installVersion()); - if (a < 0) { - return true; - } - return version.onlyVersion().compareTo(t.onlyVersion()) >= 0; - } - } - return false; - } - - public Version getVersion() { - return version; - } - - public Type getType() { - return matchType; - } - - @Override - public String toString() { - return matchType.toString() + "[" + version + "]"; - } - - /** - * Attempts to turn a wildcard version match into normal one. - * - * @param allVersions all versions to select from - * @return resolved match, or match that will produce an error on test. - */ - public Match resolveWildcards(Collection allVersions, Feedback fb) { - if (!version.hasWildcard()) { - return this; - } - List ordered = new ArrayList<>(allVersions); - Collections.sort(ordered); - Version candidate = null; - switch (matchType) { - case MOSTRECENT: - throw new IllegalArgumentException(); - - case EXACT: - // exact: find a matching version, - // if not found return the suppressed wildcard one for reporting - for (Version v : ordered) { - if (v.compareTo(version) == 0) { - if (candidate != null) { - // should not really happen - throw new IllegalArgumentException(); - } - candidate = v; - } - } - if (candidate == null) { - return this; - } else { - return new Match(candidate, matchType); - } - - case SATISFIES: - case SATISFIES_COMPATIBLE: - case INSTALLABLE: - case GREATER: - // the lowest possible matching version - // exact: find a matching version, - // if not found return the suppressed wildcard one for reporting - for (Version v : ordered) { - if (v.compareTo(version) >= 0) { - candidate = v; - break; - } - } - if (candidate == null) { - return this; - } else { - return new Match(candidate, matchType); - } - - case COMPATIBLE: - Version myInst = version.installVersion(); - Version myBase = myInst.onlyVersion(); - Version report = null; - for (Version v : ordered) { - Version inst = v.installVersion(); - if (myInst.equals(inst)) { - candidate = v; - } - if (myBase.equals(inst.onlyVersion())) { - report = v; - } - } - if (candidate == null) { - String msg; - if (report == null) { - msg = fb.withBundle(Version.class).l10n( - "VERSION_UnknownVersion1", version.displayString(), null); - } else { - msg = fb.withBundle(Version.class).l10n( - "VERSION_UnknownVersion2", version.displayString(), report.displayString()); - } - throw new UnknownVersionException( - msg, - version, report); - } else { - return new Match(candidate, matchType); - } - default: - throw new IllegalStateException(); - } - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/Bundle.properties deleted file mode 100644 index b9e9867e1d52..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/Bundle.properties +++ /dev/null @@ -1,23 +0,0 @@ -REMOTE_CatalogLabel=Component catalog for {0} -REMOTE_CatalogLabel2=Component catalog -REMOTE_ErrorDownloadCatalogNotFound=The component catalog was not found at {0}. -REMOTE_WarningErrorDownloadCatalogNotFoundSkip=Warning: The component catalog was not found at {0}. Skipping. -REMOTE_ErrorDownloadCatalog=Error downloading component catalog from {0}: {1}. \n\ - Please check your connection and proxy settings. \ - If your machine is behind a proxy, you must set your environment variables (http_proxy, https_proxy, ...) appropriately. -REMOTE_ErrorDownloadCatalogProxy=Component catalog is unreachable. \n\ - Please check your connection and proxy settings. \ - If your machine is behind a proxy, you must set your environment variables (http_proxy, https_proxy, ...) appropriately. -REMOTE_CorruptedCatalogFile=Catalog file {0} is corrupted. -REMOTE_ComponentFileLabel=Component {0} -REMOTE_UnsupportedGraalVersion=Unsupported GraalVM version: {0}, platform {1}/{2} -REMOTE_ErrorDownloadingComponent=Error downloading component {0} from {1}: {2} -REMOTE_ErrorDownloadingNotExist=Package for component {0} is not accessible at {1} -REMOTE_InvalidURL={0} is not a valid catalog URL: {1} -REMOTE_GenericLocalFile=Local file -REMOTE_LocalFileCatalog={0} -REMOTE_ErrorClosingJarFile=Could not close archive file {0}: {1} -REMOTE_CatalogDoesNotContainComponents=Catalog {0} does not contain any components. - -# {0} - original error message. -ERR_ClosingJarFile=Error closing jar file: {0} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/JarPackageProvider.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/JarPackageProvider.java deleted file mode 100644 index 2a9070fbf8fc..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/JarPackageProvider.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.ce; - -import java.io.IOException; -import java.nio.file.Path; -import java.util.jar.JarFile; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.jar.JarMetaLoader; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.ComponentArchiveReader; - -/** - * Loads JAR files. - * - * @author sdedic - */ -public final class JarPackageProvider implements ComponentArchiveReader { - @Override - public MetadataLoader createLoader(Path p, byte[] magic, String serial, Feedback feedback, boolean verify) throws IOException { - if ((magic[0] == 0x50) && (magic[1] == 0x4b) && - (magic[2] == 0x03) && (magic[3] == 0x04)) { - JarFile jf = new JarFile(p.toFile(), verify); - boolean ok = false; - try { - JarMetaLoader ldr = new JarMetaLoader(jf, serial, feedback); - ok = true; - return ldr; - } finally { - if (!ok) { - try { - jf.close(); - } catch (IOException ex) { - feedback.error("ERR_ClosingJarFile", ex, ex.getLocalizedMessage()); - } - } - } - } else { - return null; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/WebCatalog.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/WebCatalog.java deleted file mode 100644 index 589314bf9970..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/ce/WebCatalog.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.ce; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.ConnectException; -import java.net.MalformedURLException; -import java.net.NoRouteToHostException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Map; -import java.util.Properties; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Stream; - -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.IncompatibleException; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.model.RemoteInfoProcessor; -import org.graalvm.component.installer.remote.FileDownloader; -import org.graalvm.component.installer.remote.RemotePropertiesStorage; - -public class WebCatalog implements SoftwareChannel { - private final String urlString; - private final SoftwareChannelSource source; - - private URL catalogURL; - private Feedback feedback; - private ComponentRegistry local; - private ComponentStorage storage; - private RuntimeException savedException; - private RemoteInfoProcessor remoteProcessor = RemoteInfoProcessor.NONE; - - /** - * The accepted version - only exact match is supported at the moment. - */ - private Version.Match matchVersion; - - /** - * If true, enables loading different versions from V1 catalogs. - */ - private boolean enableV1Versions; - - public WebCatalog(String u, SoftwareChannelSource source) { - this.urlString = u; - this.source = source; - } - - public RemoteInfoProcessor getRemoteProcessor() { - return remoteProcessor; - } - - public void setRemoteProcessor(RemoteInfoProcessor remoteProcessor) { - this.remoteProcessor = remoteProcessor; - } - - public Version.Match getMatchVersion() { - return matchVersion; - } - - public boolean isEnableV1Versions() { - return enableV1Versions; - } - - /** - * Enables version processing in V1 catalogs. Note that not complete version string semantics is - * possible with v1 format, as version may contain underscores (_), which are delimiters in v1 - * catalogs. - *

- * The default setting is false. - * - * @param enableV1Versions true, if should be enabled. - */ - public void setEnableV1Versions(boolean enableV1Versions) { - this.enableV1Versions = enableV1Versions; - } - - /** - * Overrides versions loaded by this catalog. By default own version only is accepted. If - * matchVersion is set, the catalog will load matching version(s). At this moment only exact - * match is supported. - * - * @param aMatchVersion - */ - public void setMatchVersion(Version.Match aMatchVersion) { - this.matchVersion = aMatchVersion; - } - - protected static boolean acceptURLScheme(String scheme, String urlSpec) { - switch (scheme) { - case "http": // NOI18N - case "https": // NOI18N - case "ftp": // NOI18N - case "ftps": // NOI18N - return true; - case "file": // NOI18N - // accept only regular files - try { - Path p = new File(new URI(urlSpec)).toPath(); - return Files.isRegularFile(p) && Files.isReadable(p); - } catch (URISyntaxException ex) { - // cannot be converted to file, bail out - break; - } - } - return false; - } - - public void init(CommandInput in, Feedback out) { - init(in.getLocalRegistry(), out); - } - - public void init(ComponentRegistry aLocal, Feedback out) { - this.feedback = out.withBundle(WebCatalog.class); - this.local = aLocal; - } - - @Override - public ComponentStorage getStorage() { - if (this.storage != null) { - return this.storage; - } - - Map graalCaps = local.getGraalCapabilities(); - - StringBuilder sb = new StringBuilder(); - sb.append( - SystemUtils.patternOsName( - graalCaps.get(CommonConstants.CAP_OS_NAME), - graalCaps.get(CommonConstants.CAP_OS_VARIANT)).toLowerCase()); - sb.append("_"); - sb.append(SystemUtils.patternOsArch(graalCaps.get(CommonConstants.CAP_OS_ARCH).toLowerCase())); - - try { - catalogURL = SystemUtils.toURL(urlString); - } catch (MalformedURLException ex) { - throw feedback.failure("REMOTE_InvalidURL", ex, catalogURL, ex.getLocalizedMessage()); - } - - Properties props = new Properties(); - // create the storage. If the init fails, but process will not terminate, the storage will - // serve no components on the next call. - RemotePropertiesStorage newStorage = createPropertiesStorage(feedback, local, props, sb.toString(), catalogURL); - if (remoteProcessor != null) { - newStorage.setRemoteProcessor(remoteProcessor); - } - Properties loadProps = new Properties(); - FileDownloader dn; - try { - // avoid duplicate (failed) downloads - if (savedException != null) { - throw savedException; - } - catalogURL = SystemUtils.toURL(urlString); - String l = source.getLabel(); - dn = new FileDownloader(feedback.l10n(l == null || l.isEmpty() ? "REMOTE_CatalogLabel2" : "REMOTE_CatalogLabel", l), catalogURL, feedback); - dn.download(); - } catch (NoRouteToHostException | ConnectException ex) { - throw savedException = feedback.failure("REMOTE_ErrorDownloadCatalogProxy", ex, catalogURL, ex.getLocalizedMessage()); - } catch (FileNotFoundException ex) { - // treat missing resources as non-fatal errors, print warning - feedback.error("REMOTE_WarningErrorDownloadCatalogNotFoundSkip", ex, catalogURL); - this.storage = newStorage; - return storage; - } catch (IOException ex) { - throw savedException = feedback.failure("REMOTE_ErrorDownloadCatalog", ex, catalogURL, ex.getLocalizedMessage()); - } - // download is successful; if the processing fails after download, next call will report an - // empty catalog. - this.storage = newStorage; - - StringBuilder oldGraalPref = new StringBuilder("^" + BundleConstants.GRAAL_COMPONENT_ID); - oldGraalPref.append('.'); - - String graalVersionString; - Version normalizedVersion; - - if (matchVersion != null) { - graalVersionString = matchVersion.getVersion().displayString(); - normalizedVersion = matchVersion.getVersion().installVersion(); - } else { - // read from the release file - graalVersionString = graalCaps.get(CommonConstants.CAP_GRAALVM_VERSION).toLowerCase(); - normalizedVersion = local.getGraalVersion().installVersion(); - } - - StringBuilder graalPref = new StringBuilder(oldGraalPref); - - oldGraalPref.append(Pattern.quote(graalVersionString)); - - oldGraalPref.append('_').append(sb); - graalPref.append(sb).append('/'); - graalPref.append("(?[^/]+)$"); // NOI18N - - try (FileInputStream fis = new FileInputStream(dn.getLocalFile())) { - loadProps.load(fis); - } catch (IllegalArgumentException | IOException ex) { - throw feedback.failure("REMOTE_CorruptedCatalogFile", ex, catalogURL); - } - - Pattern oldPrefixPattern = Pattern.compile(oldGraalPref.toString(), Pattern.CASE_INSENSITIVE); - Pattern newPrefixPattern = Pattern.compile(graalPref.toString(), Pattern.CASE_INSENSITIVE); - Stream propNames = loadProps.stringPropertyNames().stream(); - boolean foundPrefix = propNames.anyMatch(p -> { - if (oldPrefixPattern.matcher(p).matches()) { - return true; - } - Matcher m = newPrefixPattern.matcher(p); - if (!m.find() || m.start() > 0) { - return false; - } - try { - Version v = Version.fromString(m.group("ver")); // NOI18N - return normalizedVersion.match(Version.Match.Type.INSTALLABLE).test(v); - } catch (IllegalArgumentException ex) { - return false; - } - }); - if (!foundPrefix) { - boolean graalPrefixFound = false; - boolean componentFound = false; - for (String s : loadProps.stringPropertyNames()) { - if (s.startsWith(BundleConstants.GRAAL_COMPONENT_ID)) { - graalPrefixFound = true; - } - if (s.startsWith("Component.")) { - componentFound = true; - } - } - if (!componentFound) { - // no graal prefix, no components - feedback.verboseOutput("REMOTE_CatalogDoesNotContainComponents", catalogURL); - return newStorage; - } else if (!graalPrefixFound) { - // strange thing, no graal declaration, but components are there ? - throw feedback.failure("REMOTE_CorruptedCatalogFile", null, catalogURL); - } else { - throw new IncompatibleException( - feedback.l10n("REMOTE_UnsupportedGraalVersion", - graalCaps.get(CommonConstants.CAP_GRAALVM_VERSION), - graalCaps.get(CommonConstants.CAP_OS_NAME), - graalCaps.get(CommonConstants.CAP_OS_ARCH)), - null); - } - } - props.putAll(loadProps); - return newStorage; - } - - protected RemotePropertiesStorage createPropertiesStorage(Feedback aFeedback, - ComponentRegistry aLocal, Properties props, String selector, URL baseURL) { - return new RemotePropertiesStorage( - aFeedback, aLocal, props, selector, null, baseURL); - } - - @Override - public FileDownloader configureDownloader(ComponentInfo cInfo, FileDownloader dn) { - return dn; - } - - public static class WebCatalogFactory implements SoftwareChannel.Factory { - private CommandInput input; - - @Override - public SoftwareChannel createChannel(SoftwareChannelSource src, CommandInput in, Feedback fb) { - String urlSpec = src.getLocationURL(); - int schColon = urlSpec.indexOf(':'); // NOI18N - if (schColon == -1) { - return null; - } - String scheme = urlSpec.toLowerCase().substring(0, schColon); - if (acceptURLScheme(scheme, urlSpec)) { - WebCatalog c = new WebCatalog(urlSpec, src); - c.init(in, fb); - return c; - } - return null; - } - - @Override - public void init(CommandInput in, Feedback out) { - assert this.input == null; - this.input = in; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/AbstractInstaller.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/AbstractInstaller.java deleted file mode 100644 index 23a03ef7ada9..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/AbstractInstaller.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.Closeable; -import java.io.IOException; -import java.nio.file.Path; -import java.util.Collections; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileOperations; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.Verifier; - -/** - * Abstract configurable base for installer. The real installer and test stub inherits from this - * base; are configured by InstallCommand. - * - * @author sdedic - */ -public abstract class AbstractInstaller implements Closeable { - protected final Feedback feedback; - protected final ComponentInfo componentInfo; - protected final ComponentRegistry registry; - protected final ComponentCollection catalog; - protected final Archive archive; - protected final FileOperations fileOps; - - private Map permissions = Collections.emptyMap(); - private Map symlinks = Collections.emptyMap(); - private Set componentDirectories = Collections.emptySet(); - private final Set trackedPaths = new HashSet<>(); - private Path licenseRelativePath; - private boolean replaceDiferentFiles; - private boolean replaceComponents; - private boolean dryRun; - private boolean ignoreRequirements; - private boolean failOnExisting = true; - private Path installPath; - private boolean allowUpgrades; - - public AbstractInstaller(Feedback fb, FileOperations fops, ComponentInfo info, - ComponentRegistry reg, ComponentCollection cat, Archive a) { - this.feedback = fb; - this.componentInfo = info; - this.registry = reg; - this.archive = a; - this.catalog = cat; - this.fileOps = fops; - } - - public Archive getArchive() { - return archive; - } - - public boolean isComplete() { - return archive != null; - } - - public boolean isAllowUpgrades() { - return allowUpgrades; - } - - public void setAllowUpgrades(boolean allowUpgrades) { - this.allowUpgrades = allowUpgrades; - } - - public boolean isFailOnExisting() { - return failOnExisting; - } - - public void setFailOnExisting(boolean failOnExisting) { - this.failOnExisting = failOnExisting; - } - - public boolean isReplaceDiferentFiles() { - return replaceDiferentFiles; - } - - public void setReplaceDiferentFiles(boolean replaceDiferentFiles) { - this.replaceDiferentFiles = replaceDiferentFiles; - } - - public boolean isReplaceComponents() { - return replaceComponents; - } - - public void setReplaceComponents(boolean replaceComponents) { - this.replaceComponents = replaceComponents; - } - - public boolean isIgnoreRequirements() { - return ignoreRequirements; - } - - public void setIgnoreRequirements(boolean ignoreRequirements) { - this.ignoreRequirements = ignoreRequirements; - } - - public ComponentInfo getComponentInfo() { - return componentInfo; - } - - public Set getTrackedPaths() { - return trackedPaths; - } - - public Map getPermissions() { - return permissions; - } - - public void setPermissions(Map permissions) { - this.permissions = permissions; - } - - public Map getSymlinks() { - return symlinks; - } - - public void setSymlinks(Map symlinks) { - this.symlinks = symlinks; - } - - public abstract void revertInstall(); - - public Verifier createVerifier() { - return new Verifier(feedback, registry, catalog) - .ignoreRequirements(ignoreRequirements) - .replaceComponents(replaceComponents) - .ignoreExisting(!failOnExisting); - } - - public Verifier validateRequirements() { - Verifier vrf = createVerifier(); - return vrf.setVersionMatch(registry.getGraalVersion().match(Version.Match.Type.COMPATIBLE)) - .validateRequirements(componentInfo); - } - - /** - * Validates requirements, decides whether to install. Returns false if the component should be - * skipped. - * - * @return true, if the component should be installed - * @throws IOException - */ - public abstract boolean validateAll() throws IOException; - - public abstract void validateFiles() throws IOException; - - public abstract void validateSymlinks() throws IOException; - - public abstract void processPermissions() throws IOException; - - public abstract void createSymlinks() throws IOException; - - public Path getInstallPath() { - return installPath; - } - - public void setInstallPath(Path installPath) { - this.installPath = installPath.normalize(); - } - - public Path getLicenseRelativePath() { - return licenseRelativePath; - } - - public void setLicenseRelativePath(Path licenseRelativePath) { - this.licenseRelativePath = licenseRelativePath; - } - - @Override - public void close() throws IOException { - if (archive != null) { - archive.close(); - } - } - - public boolean isDryRun() { - return dryRun; - } - - public void setDryRun(boolean dryRun) { - this.dryRun = dryRun; - } - - public Set getComponentDirectories() { - return componentDirectories; - } - - public void setComponentDirectories(Set componentDirectories) { - this.componentDirectories = componentDirectories; - } - - protected void addTrackedPath(String path) { - trackedPaths.add(path); - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/AvailableCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/AvailableCommand.java deleted file mode 100644 index 8c908eef0dd5..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/AvailableCommand.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.Verifier; - -/** - * - * @author sdedic - */ -public class AvailableCommand extends ListInstalledCommand { - - private Version.Match vmatch; - - @Override - public Map supportedOptions() { - Map opts = new HashMap<>(super.supportedOptions()); - opts.put(Commands.OPTION_ALL, ""); - opts.put(Commands.LONG_OPTION_ALL, Commands.OPTION_ALL); - opts.put(Commands.OPTION_VERSION, "s"); - opts.put(Commands.LONG_OPTION_VERSION, Commands.OPTION_VERSION); - - opts.put(Commands.OPTION_CATALOG, "X"); - opts.put(Commands.OPTION_FOREIGN_CATALOG, "s"); - opts.put(Commands.LONG_OPTION_FOREIGN_CATALOG, Commands.OPTION_FOREIGN_CATALOG); - - opts.put(Commands.OPTION_USE_EDITION, "s"); - opts.put(Commands.LONG_OPTION_USE_EDITION, Commands.OPTION_USE_EDITION); - - opts.put(Commands.OPTION_SHOW_CORE, ""); - opts.put(Commands.LONG_OPTION_SHOW_CORE, Commands.OPTION_SHOW_CORE); - - opts.put(Commands.OPTION_SHOW_UPDATES, ""); - opts.put(Commands.LONG_OPTION_SHOW_UPDATES, Commands.OPTION_SHOW_UPDATES); - return opts; - } - - @Override - protected ComponentCollection initRegistry() { - super.initRegistry(); - if (showUpdates) { - input.getRegistry().setAllowDistUpdate(true); - } - return input.getRegistry(); - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - String v = commandInput.optValue(Commands.OPTION_VERSION); - if (v != null) { - vmatch = Version.versionFilter(v); - } - showUpdates = commandInput.hasOption(Commands.OPTION_SHOW_UPDATES) || commandInput.hasOption(Commands.OPTION_ALL); - showCore = commandInput.hasOption(Commands.OPTION_SHOW_CORE) | showUpdates | commandInput.hasOption(Commands.OPTION_USE_EDITION); - super.init(commandInput, feedBack); - } - - private boolean showUpdates; - private boolean showCore; - - @Override - public int execute() throws IOException { - if (input.optValue(Commands.OPTION_HELP) != null) { - feedback.output("AVAILABLE_Help"); - return 0; - } - return super.execute(); - } - - private boolean defaultFilter = true; - - @Override - protected List filterDisplayedVersions(String id, Collection infos) { - if (input.optValue(Commands.OPTION_ALL) != null) { - return super.filterDisplayedVersions(id, infos); - } - Set seen = new HashSet<>(); - Collection filtered = new ArrayList<>(); - - Verifier vrf = new Verifier(feedback, input.getLocalRegistry(), input.getRegistry()); - vrf.setCollectErrors(true); - vrf.setSilent(true); - vrf.ignoreExisting(true); - if (showUpdates) { - vrf.setVersionMatch(getRegistry().getGraalVersion().match(Version.Match.Type.INSTALLABLE)); - } else { - vrf.setVersionMatch(getRegistry().getGraalVersion().match(Version.Match.Type.SATISFIES_COMPATIBLE)); - } - if (defaultFilter) { - List sorted = new ArrayList<>(infos); - Collections.sort(sorted, ComponentInfo.versionComparator().reversed()); - for (ComponentInfo ci : sorted) { - // for non-core components, only display those compatible with the current release. - if (vrf.validateRequirements(ci).hasErrors()) { - continue; - } - if (CommonConstants.GRAALVM_CORE_PREFIX.equals(ci.getId())) { - if (!showCore || - // graalvm core does not depend on anything: - !vrf.getVersionMatch().test(ci.getVersion())) { - // filter out graalvm core by default - continue; - } - } - // select just the most recent version - filtered.add(ci); - break; - } - } else { - for (ComponentInfo ci : infos) { - if (seen.add(ci.getVersion().installVersion())) { - filtered.add(ci); - } - } - } - return super.filterDisplayedVersions(id, filtered); - } - - @Override - protected String acceptExpression(String expr) { - if (vmatch != null) { - return super.acceptExpression(expr); - } - Version.Match vm = Version.versionFilter(expr); - if (vm == null) { - vmatch = getRegistry().getGraalVersion().match(Version.Match.Type.INSTALLABLE); - defaultFilter = true; - return expr; - } else { - defaultFilter = false; - vmatch = vm; - // consume - return null; - } - } - - @Override - protected Version.Match getVersionFilter() { - return vmatch == null ? super.getVersionFilter() : vmatch; - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Bundle.properties deleted file mode 100644 index 0d5ccfe118ab..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Bundle.properties +++ /dev/null @@ -1,409 +0,0 @@ -INSTALL_FileManipulationError=I/O error encountered during processing component {0}: {1} -INSTALL_OverwriteWithDirectory=Refused to overwrite file with directory: {0} -INSTALL_OverwriteWithFile=Refused to overwrite directory with file: {0} -INSTALL_OverwriteWithLink=Refused to overwrite directory or file with symlink: {0} -INSTALL_ReplacedFileDiffers=Existing file contents differ: {0}. Run with -f to force overwrite. -INSTALL_CannotCleanupFile=Could not clean up file {0}: {1} -INSTALL_ErrorClosingFile=Error closing component file {0}: {1} -INSTALL_SkipIdenticalFile=Skipping identical file: {0} -INSTALL_InstallingFile=Extracting: {0} -INSTALL_ReplacingFile=Replacing: {0} -INSTALL_CreatingDirectory=Creating directory: {0} -INSTALL_CreatingSymlink=Creating symbolic link: {0} -> {1} -INSTALL_CleanupFile=Cleaning up file: {0} -INSTALL_CleanupDirectory=Cleaning up directory: {0} -INSTALL_SkippingSharedFile=Skipping shared file: {0} -INSTALL_FailedToDeleteFile=Failed to remove file {0}: {1} -INSTALL_FailedToDeleteDirectory=Failed to remove directory {0}: {1} -INSTALL_PrepareToInstall=Preparing to install {0}, contains {1}, version {2} ({1}) -INSTALL_ErrorDuringProcessing=Installation of {0} failed: {1} -INSTALL_IgnoreFailedInstallation=Ignored failure: {0} -INSTALL_IgnoreFailedInstallation2=Ignored failed installation of {0}: {1} -INSTALL_VerboseValidation=Checking entry: {0} -INSTALL_VerboseCapabilityNone=None -INSTALL_VerboseCheckRequirements=Checking requirements of component {1} ({0}), version {2} -INSTALL_VerboseCapability=\tRequires {0} = {1}, GraalVM provides: {2} -INSTALL_VerboseProcessingArchive=Processing Component archive: {0} -INSTALL_VerboseProcessingComponent=Processing Component: {0} -INSTALL_InvalidComponentArchive={0} is corrupted or is not a component archive. -INSTALL_RemoveExistingComponent=Replacing existing component: {1} ({0}, version {2}) with {4} ({3}, version {5}) -INSTALL_InstallNewComponent=Installing new component: {1} ({0}, version {2}) -UNINSTALL_DeletingDirectoryRecursively=Erasing subtree: {0} -INSTALL_ComponentAlreadyInstalled=Component {0} ({1}) is already installed. - -INSTALL_WriteOutsideGraalvm=Attempt to write outside GraalVM directory: {0} -INSTALL_SymlinkOutsideGraalvm=Symlink {0} points outside GraalVM directory: {1} - -INSTALLER_FailError={0} - -UNINSTALL_UnknownComponentId=Unknown component id: {0}. Use "gu list" to retrieve the list of components and their IDs. -UNINSTALL_IgnoreFailed=Failed uninstallation of {0} ignored. The error was: {1} -UNINSTALL_ErrorDuringProcessing=Uninstallation failed: {0} -UNINSTALL_UninstallingComponent=Uninstalling: {0} -UNINSTALL_DeletingFile=Deleting: {0} -UNINSTALL_DeletingDirectory=Deleting directory: {0} -UNINSTALL_ErrorRestoringPermissions=Error restoring permissions for {0}: {1} -UNINSTALL_BrokenDependenciesWarn=Warning: Uninstallation will break dependent components: -UNINSTALL_BrokenDependencies=Uninstallation would break dependent components. Broken dependencies follow: -UNINSTALL_BreakDepSource={0} ({1}) is required by: -UNINSTALL_BreakDepTarget=\ {0} ({1}) -UNINSTALL_BreakDependenciesTerminate=Other components would be broken by this operation; will terminate. Use -D or -f to override. -UNINSTALL_BrokenDependenciesRemove=Uninstallation would break dependent Components. They will be uninstalled as well: - -INSTALL_ParametersMissing=Missing filename(s) of component bundle(s) to install. -INSTALL_Help=\ - Usage:\n\ - gu install [-0cCDfFiLMnorsuvxyY] param [param ...]\n\ -\n\ -Options:\n\ -\ -0, --dry-run dry run, make no changes\n\ -\ -c, --catalog treat parameters as component IDs from a catalog of GraalVM components. This is the default.\n\ -\ -C, --custom-catalog use a specific catalog URL or local directory to locate components.\n\ -\ -D, --local-deps attempt to resolve dependencies using local files located next to the paths on the command line.\n\ -\ --edition use catalogs from the specified edition\n\ -\ -f, --force force overwrite, bypass version checks.\n\ -\ -i, --fail-existing fail on existing component.\n\ -\ -L, --local-file, --file treat parameters as local filenames of packaged components.\n\ -\ -M, --no-deps ignore dependencies.\n\ -\ -n, --no-progress do not display download progress.\n\ -\ -o, --overwrite overwrite different files.\n\ -\ -r, --replace replace existing components.\n\ -\ -s, --no-verify-jars skip integrity verification of component archives\n\ -\ -u, --url interpret parameters as URLs of packaged components.\n\ -\ -v, --verbose be verbose. Print versions and dependency information.\n\ -\ -x, --ignore ignore failures.\n\ -\ -y, --only-validate do not install, just check compatibility and conflicting files.\n\ -\ -Y, --validate-before download, verify, check file conflict before any disk change is made.\n - - -UNINSTALL_ParametersMissing=Missing component ID(s) to uninstall. -UNINSTALL_Help=\ - Usage:\n\ - gu remove [-0DfMxv] id [id ...]\n\ -\n\ -Options:\n\ -\ -0, --dry-run dry run, make no changes.\n\ -\ -D, --remove-deps remove dependent components as well.\n\ -\ -f, --force force overwrite, bypass version checks.\n\ -\ -M, --no-deps ignore dependencies.\n\ -\ -v, --verbose be verbose. Print versions and dependency information.\n\ -\ -x, --ignore do not stop on undeletable files.\n\ - -LIST_NoComponentsFound=No components found. -LIST_ComponentShortListHeader=\ -ComponentId Version Component name Stability Origin \n\ ---------------------------------------------------------------------------------------------------------------------------------- -# 25 +20 +30 +30 -# The following bundle is actually a String.format format pattern. -# The most important is the width and precision which should follow the header widths -LIST_ComponentShortListHeader_Simple@=*ComponentList -LIST_ComponentShortList=%1$-25.25s%2$-20.20s%3$-30.30s%6$-30.30s%4$s -LIST_ComponentShortList_Simple@=%5$s;%2$s;%3$s;%4$s;%6$s;%7$s -LIST_PrintVerbatim={0} -LIST_ComponentFilesHeader={0} installed files and directories: -LIST_ComponentFilesHeader_Simple@=*Files:{0} -LIST_ComponentFilesEnd@=*EndFiles -LIST_MetadataUnknown=n/a -LIST_ComponentBasicInfo=\ -ID : {0}\n\ -Name : {2}\n\ -Version : {1}\n\ -GraalVM : {3}\n\ -Stability: {6}\n\ -Origin : {4} -LIST_ComponentBasicInfo_Simple@={5};{0};{1};{2};{3};{4};{6};{7} -LIST_RequirementsHeader=Requirements -LIST_ErrorInComponentMetadata=There were errors reading component information: -LIST_ErrorInComponentMetadataItem= - {0} - -LIST_Help=\ - Usage:\n\ - gu list [-cJlv] [ [ ...]]\n\ -\n\ - The expression filters installed components. Can be a component ID,\ - or a regular expression, optionally enclosed in quotes or double quotes.\ - If no expression is given, all installed components are listed.\n\ -\n\ - Options:\n\ -\ -c, --catalog list components available in catalog. Same as "gu available" for compatibility.\n\ -\ -J, --json output in JSON format.\n\ -\ -l, --list-files list files. Only installed components.\n\ -\ -v, --verbose be verbose. Print more detailed information. - - -AVAILABLE_Help=\ - Usage:\n\ - gu available [-aCJlvV] [ [ ...]]\n\ -\n\ - The expression filters catalog components. Can be a component ID,\ - or a regular expression, optionally enclosed in quotes or double quotes.\ - If no expression is given, all installed components are listed.\n\ -\n\ - Options:\n\ -\ -a, --all-versions show all versions\n\ -\ -C, --custom-catalog use a specific catalog URL or local directory to locate components.\n\ -\ --edition show components from the specified edition\n\ -\ -J, --json output in JSON format.\n\ -\ -l, --list-files list files. Only installed components.\n\ -\ --show-core show core component\n\ -\ --show-updates show updated versions of components.\n\n\ -\ -v, --verbose be verbose. Print more detailed information.\n\ -\ -V, --use-version use specified version of components.\n\ -\n\ -Version can be specified as:\n\ -\ version - the specified version, and its newest patch\n\ -\ ~version - the specified version, and its newest patch (same as preceding form)\n\ -\ =version - precise version, including patch number\n\ -\ +version - the most recent version, newer or equal to the specified one\n\ -as part of "-V" switch. Can be also appended after component id, for example ruby=1.0 - -INFO_Help=\ - Usage:\n\ - gu info [-cCFJlLnprstuvV] [ ...]\n\ -\n\ - Print information about the component in the specified file or about a specific \ - component in the catalog.\n\ -\n\ - Options:\n\ -\ -c, --catalog treat parameters as component IDs from the catalog of GraalVM components. This is the default.\n\ -\ -C, --custom-catalog use a specific catalog URL or local directory to locate components.\n\ -\ --edition use catalogs from the specified edition\n\ -\ -J, --json output in JSON format.\n\ -\ -l, --list-files list files.\n\ -\ -L, --local-file treat parameters as local filenames of packaged components.\n\ -\ -n, --no-progress do not display download progress.\n\ -\ -p, --paths display full path in table listing.\n\ -\ -r, --ignore-open ignore errors when opening component archives. Continues with the next component.\n\ -\ -s, --no-verify-jars skip integrity verification of component archives\n\ -\ -t, --no-tables do NOT use table listings.\n\ -\ -u, --url interpret parameters as URLs of packaged components.\n\ -\ -v, --verbose be verbose. Print versions and dependency info.\n\ -\ -V, --use-version use specified version of components.\n\ -\n\ -Version can be specified as:\n\ -\ version - the specified version, and its newest patch\n\ -\ ~version - the specified version, and its newest patch (same as preceding form)\n\ -\ =version - precise version, including patch number\n\ -\ +version - the most recent version, newer or equal to the specified one\n\ -as part of "-V" switch. Can be also appended after component id, e.g. ruby=1.0 - -INFO_ClosingComponent=Error closing component bundle {0}: {1} -INFO_ErrorOpeningBundle=Invalid or corrupted component bundle {0}: {1} -INFO_ErrorReadingBundle=I/O error reading component bundle {0}: {1} -INFO_CorruptedBundleMetadata=Invalid or missing metadata {1} in bundle {0}: {2} -INFO_MissingFilename=Missing filename. - -INFO_ComponentShortListHeader=\ -File ComponentId Version Component name Stability\n\ --------------------------------------------------------------------------------------------------------- -# +20 +25 +11 +30 -# -# The following bundle is actually a String.format format pattern. -# The most important is the width and precision which should follow the header widths -INFO_ComponentShortList=%4$-20.20s%1$-25.25s%2$-11.11s%3$-30.30s%5$s - -INFO_ComponentLongListHeader=\ -Path\n\ - ComponentId Version Component name Stability\n\ -------------------------------------------------------------------------------------------------- -# +25 +20 +30 -# The following bundle is actually a String.format format pattern. -# The most important is the width and precision which should follow the header widths -INFO_ComponentLongList=%4$s\n %1$-21.21s%2$-20.20s%3$-30.30s%5$s - -INFO_ComponentNoFileHeader=\ -ComponentId Version Component name Stability\n\ --------------------------------------------------------------------------------------------------- -#+00 +25 +20 +30 -# -# The following bundle is actually a String.format format pattern. -# The most important is the width and precision which should follow the header widths -INFO_ComponentShortListNoFile=%1$-25.25s%2$-20.20s%3$-30.30s%5$s - -INFO_ComponentBasicInfo=\ -Filename : {3}\n\ -Name : {2}\n\ -ID : {0}\n\ -Version : {1}\n\ -GraalVM : {4}\n\ -Stability: {5} - -INFO_ComponentRequirementsHeader=Requirements: -INFO_ComponentRequirement=\t{0} = {1} - -INFO_ComponentBroken=Component bundle {0} is broken -INFO_ComponentErrorIndent=\t- {0} -INFO_ComponentWillNotInstall=Component bundle {0} cannot be installed -INFO_ComponentDependencyIndent=\t- {0} - -# Relative path from graalvm home to the rebuild-images tool -REBUILD_ToolRelativePath=lib/svm/bin/rebuild-images -REBUILD_ImageToolInterrupted=The image rebuild has been interrupted. -REBUILD_RewriteRebuildToolName=gu rebuild-images - - -INSTALL_LicenseAcceptedAt=The license {0} is already accepted on {1} for {2} ({3}). -INSTALL_AcceptLicense=The component(s) {0} requires you to accept the following license: {1} -INSTALL_AcceptSingleLicense=Enter "Y" to confirm and accept all the license(s). Enter "R" to the view the license text.\n\ - Any other input will cancel the installation: -INSTALL_LicensesToAccept=Component(s) selected for install require(s) you to accept license(s): -INSTALL_LicenseComponentStart={0} -INSTALL_LicenseComponentCont={0}, {1} -INSTALL_AcceptLicenseComponents=\t{2}: {0} - {1} -INSTALL_AcceptAllLicensesPrompt=Enter "Y" to confirm and accept all the license(s).\n\ - Enter a number to the see license text. Enter "c" to cancel the operation: -INSTALL_AcceptLicensePrompt=Do you accept this license (Y for "yes", any other input for "no") ? : -INSTALL_AcceptPromptResponseYes@=Yes|y -INSTALL_AcceptPromptResponseRead@=List|Lst|L|Read|R -INSTALL_AcceptPromptResponseAbort@=Cancel|c|exit|e -INSTALL_LicenseNumberInvalidEntry=The entry is not valid. Enter a number (1-{0}, "Y" or "c": -INSTALL_LicenseNumberOutOfRange=Invalid number, must be 1-{0}: -INSTALL_LicenseNotFound=License not found in archive at {0}. -INSTALL_ErrorHandlingLicenses=Error during processing of license(s): {0} -INSTALL_RequiredDependencies=Additional Components are required: -# {0} - component name -# {1} - component Id -# {2} - component version -# {3} - additional test 'required by' or empty -INSTALL_RequiredDependencyLine=\ {0} ({1}, version {2}){3} -# {0} - list of required component names/ids, see INSTALL_RequiredDependencyItem -INSTALL_RequiredDependencySuffix=, required by: {0} -INSTALL_RequiredDependencyItem={0} ({1}) -INSTALL_UnknownComponents=Missing required component(s): -# {0} - component Id -# {1} - additional test 'required by' or empty -INSTALL_UnknownComponentLine=\ {0}{1} -INSTALL_UnresolvedDependencies=There were unresolved dependencies, terminating installation. -INSTALL_UnknownComponentsNote1=Note: You can use "-c", e.g. \n\ - \tgu install -L -c {0}\n\ - to resolve dependencies using catalog(s) and download required additional components. -INSTALL_UnknownComponentsNote2=Note: You can use "-D", e.g. \n\ - \tgu install -L -D {0}\n\ - to search for dependencies in parent directories of the files provided on the command line. - -# {0} - native component ID, name of the package -# {1} - the component name. -UNINSTALL_NativeComponent={1} ({0}) is a native component, use system tools to remove it, e.g.\n\ -\ yum remove {0}\n -# {0} - native component ID, name of the package -# {1} - the component name. -UNINSTALL_BundledComponent={1} ({0}) is bundled in the base package, it cannot be removed. -# {0} - component ID -UNINSTALL_CoreComponent={0} is a core component and cannot be uninstalled. - -# {0} - the current version -UPGRADE_NoUpdateFound=No GraalVM upgrade is found for the version {0} -UPGRADE_NoUpdateLatestVersion=No upgrade of GraalVM core is necessary, {0} is the latest version. -# {0} - directory where a new installation should be created -UPGRADE_DirectoryNotWritable=New GraalVM installation cannot be created: directory {0} is not writable. -# {0} - directory where a new installation should be created -UPGRADE_TargetDirectoryExists=Cannot install GraalVM: file or directory {0} already exists. -UPGRADE_CantDeleteOldSymlink=Could not delete old symlink {0}: {1} -UPGRADE_CantCreateNewSymlink=Unable to create new symlink {0}: {1} -# {0} - version -# {2} - java prefix -UPGRADE_GraalVMDirName@=graalvm-java{2}-{0} -# {0} - version -# {1} - edition -# {2} - java prefix -UPGRADE_GraalVMDirNameEdition@=graalvm-{1}-java{2}-{0} -# {0} - required version -UPGRADE_NoVersionSatisfiesComponents=No GraalVM version satisfies all the requested components. At least {0} is required. -UPGRADE_ComponentsCannotMigrate=Some of the installed components cannot migrate to the new version. Please upgrade to a specific GraalVM version first. -UPGRADE_ComponentsMissingFromEdition=Some of the installed components may be missing from edition "{0}". Use --ignore-missing to install anyway. -UPGRADE_CannotMigrateLicense=Could not migrate license acceptance: component {0}, license ID {1}. -UPGRADE_MissingParameter=Missing required parameter. -UPGRADE_CannotDowngrade=Cannot downgrade to an old version {0}. Please install manually. -UPGRADE_PreparingInstall=\ -\n=========================================================================\n\ -\tPreparing to install GraalVM Core version {0}.\n\ -\tDestination directory: {1}\n\ -========================================================================= -UPGRADE_InstallingCore=Installing GraalVM Core version {0} to {1}... -UPGRADE_MigratingLicenses=Copying license info from {0} to {1}. -UPGRADE_WarningEditionDifferent=NOTE: Downloaded GraalVM Core {0} specifies different installation directory name: {1}. -UPGRADE_TargetExistsNotDirectory=New GraalVM Core is to be installed to {0}; the destination exists but is NOT a directory. -UPGRADE_TargetExistsNotEmpty=The destination directory {0} is not empty. -UPGRADE_TargetExistsContainsGraalVM=The destination directory {0} already contains a GraalVM version {1}. - -UPDATE_Help=\ - Usage:\n\ - gu update [-f] [param ...]\n\ -\n\ - Update some or all installed components to their latest patches in the current\n\ - installation. Will not install new GraalVM Core - use "gu install" to do so. - -UPGRADE_Help=\ - Usage:\n\ - gu upgrade [-cCdLnsSux] [version] [param ...]\n\ - gu update [-cCdLnsSux] [version] [param ...]\n\ -\n\ - Options:\n\ -\ -c, --catalog treat parameters as component IDs from a catalog of GraalVM components. This is the default.\n\ -\ -C, --custom-catalog use a specific catalog URL to locate components.\n\ -\ -d, --target-dir install into specified target dir, implies -S\n\ -\ --edition show components from the specified edition\n\ -\ -L, --local-file treat parameters as local filenames of packaged components.\n\ -\ -n, --no-progress do not display download progress.\n\ -\ -s, --no-verify-jars skip integrity verification of component archives\n\ -\ -S, --no-symlink do not create or update symlink\n\ -\ -u, --url interpret parameters as URLs of packaged components.\n\ -\ -x, --ignore-missing ignore missing components for the target version, install new core anyway\n\ -\n\ - If "version" is specified, the GraalVM will be updated to that version.\n\ -\n\ - The GraalVM core will be upgraded and existing components reinstalled in appropriate versions into the \n\ - new installation. Additional components to install may be specified as parameters. The install will fail if the\\n\ - updated GraalVM core does not support any of currently installed components. -x will force the installation and\n\ - will drop the unsupported component. -f will disable all version checks.\ -\n - -INFO_InvalidComponent=Invalid parameter: {0} -UPGRADE_NoSpecificVersion=GraalVM core is not available in version {0}. -UPGRADE_NoSpecificVersion2=GraalVM core is not available in version {0}. Pick e.g. {1}. - -# {0} - the native-image component ID. -REBUILD_RebuildImagesNotInstalled=Error: rebuild-images utility is not available. You may need to install "{0}" component. \n\ -Please refer to the documentation for details. - -INSTALL_WarnLocalDependencies=Warning: -D (use local files for dependencies) was specified without -L (use local files); there \ - are no locations to load local files from. -D will be ignored. - -INSTALL_CannotReplaceBundledComponent=The component {0} is bundled with the base GraalVM and cannot be replaced. -INSTALL_UsingNewerComponent=Using newer version of component {0} ({1}): {2} (the older version was: {3}) -INSTALL_CannotDigestLicense=Could not digest license text: {0} - -INSTALL_DownloadLicenseFile=License file -# {0} license name -INSTALL_DownloadLicenseName=Contents of "{0}" - -# [0} license Id -# {1} error message -WARN_LicenseNotRecorded=Warning: Acceptance of license {0} could not be recorded: {1} -UPGRADE_CannotMigrateGDS=Warning: Could not migrate GDS settings -# {0} symlink name -# {1} symlink target -UPGRADE_CreatingSymlink=Creating symlink to the new GraalVM Installation: {0} -> {1} -UPGRADE_UpdatingSymlink=Updating symlink to the new GraalVM Installation: {0} -> {1} - -# {0} - graalvm core name -# {1} - graalvm core version -# {2} - list of components -UPGRADE_MissingComponents=Components missing for {0} {1}: \n{2} -# {0} - component (short) ID -# {1} - component name -UPGRADE_MissingComponentItem=\t{0} ({1}) -# {0} - preceding list part, -# {1} - additional item. -UPGRADE_MissingComponentListPart={0},\n{1} -# {0} - list contents -UPGRADE_MissingComponentListFinish={0} - -@INSTALL_Error_ComponentDiffers_Report=\nBroken component and/or catalog: The remote component differs from the catalog information. \n\ - \ Catalog Component package\n\ - ---------------------------------------------------------------------------------\n\ - Id: %1$-35s %2$-35s\n\ - Version: %3$-35s %4$-35s\n\n -# The newline at start and the end of above message is deliberate - -INSTALL_Error_ComponentDiffers=Component info mismatch. diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/GraalVMInstaller.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/GraalVMInstaller.java deleted file mode 100644 index 4c4cec8f4f37..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/GraalVMInstaller.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; -import java.util.Optional; -import java.util.Set; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileOperations; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.ManagementStorage; - -/** - * - * @author sdedic - */ -public class GraalVMInstaller extends Installer { - private static final String SYMLINK_NAME = "active"; // NOI18N - - private Path currentInstallPath; - private boolean disableSymlinks; - private boolean createSymlink; - - public GraalVMInstaller(Feedback feedback, FileOperations fops, ComponentRegistry current, - ComponentInfo componentInfo, ComponentCollection collection, Archive a) { - super(feedback, fops, componentInfo, - new ComponentRegistry(feedback, - new TransientStorage( - componentInfo.getVersion(), - current.getGraalCapabilities(), componentInfo.getProvidedValues())), - collection, a); - } - - public Path getCurrentInstallPath() { - return currentInstallPath; - } - - public Path getInstalledPath() { - return getInstallPath().resolve(SystemUtils.getGraalVMJDKRoot(registry)); - } - - public void setCurrentInstallPath(Path currentInstallPath) { - this.currentInstallPath = currentInstallPath.normalize(); - } - - public boolean isDisableSymlinks() { - return disableSymlinks; - } - - public void setDisableSymlinks(boolean disableSymlinks) { - this.disableSymlinks = disableSymlinks; - } - - public boolean isCreateSymlink() { - return createSymlink; - } - - public void setCreateSymlink(boolean createSymlink) { - this.createSymlink = createSymlink; - } - - void createSymlink() throws IOException { - if (Files.getFileStore(getInstallPath()).supportsFileAttributeView("isSymbolicLink")) { - return; - } - createSymlink(findSymlink(getInstalledPath().getParent()).orElse(null)); - } - - Path createSymlink(Path linkFile) { - Path parent = linkFile == null ? getInstallPath().getParent() : linkFile.getParent(); - if (parent == null) { - return null; - } - Path linkTarget; - - try { - linkTarget = parent.relativize(getInstallPath()); - } catch (IllegalArgumentException ex) { - linkTarget = getInstallPath(); - } - if (!disableSymlinks) { - if (linkFile != null) { - boolean create = false; - try { - feedback.output("UPGRADE_UpdatingSymlink", linkFile, linkTarget); - Files.delete(linkFile); - create = true; - Files.createSymbolicLink(linkFile, linkTarget); - } catch (IOException ex) { - feedback.error( - create ? "UPGRADE_CantCreateNewSymlink" : "UPGRADE_CantDeleteOldSymlink", - ex, linkFile, ex.getLocalizedMessage()); - } - - } else if (createSymlink) { - Path linkSource = parent.resolve(SYMLINK_NAME); - try { - feedback.output("UPGRADE_CreatingSymlink", linkSource, linkTarget); - Files.createSymbolicLink(linkSource, linkTarget); - } catch (IOException ex) { - feedback.error( - "UPGRADE_CantCreateNewSymlink", - ex, linkFile, ex.getLocalizedMessage()); - } - } - } - return linkFile; - } - - Optional findSymlink(Path parentPath) throws IOException { - return Files.list(parentPath).filter((p) -> { - if (!Files.isSymbolicLink(p)) { - return false; - } - Path target; - try { - target = Files.readSymbolicLink(p); - return Files.isSameFile(p.resolveSibling(target), currentInstallPath); - } catch (IOException ex) { - // OK, symlink unreadable - return false; - } - }).findAny(); - } - - Path existingSymlink() throws IOException { - Path parentPath = getInstallPath().getParent(); - Optional existingLink = findSymlink(parentPath); - if (!existingLink.isPresent()) { - existingLink = findSymlink(getInstallPath().toRealPath().getParent()); - } - return existingLink.orElse(null); - } - - @Override - void installContent() throws IOException { - Path registryPath = getInstalledPath().resolve(SystemUtils.fromCommonRelative(CommonConstants.PATH_COMPONENT_STORAGE)); - Files.createDirectories(registryPath); - super.installContent(); - } - - /** - * Does not write to the new installation, and extracts version info from the GraalVM core - * component. - */ - static class TransientStorage implements ManagementStorage { - private final Map graalCaps = new HashMap<>(); - - TransientStorage(Version newGraalVersion, Map graalCaps, Map newCaps) { - this.graalCaps.putAll(graalCaps); - graalCaps.put(BundleConstants.GRAAL_VERSION, newGraalVersion.toString()); - for (String s : newCaps.keySet()) { - graalCaps.put(s, newCaps.get(s).toString()); - } - } - - @Override - public void deleteComponent(String id) throws IOException { - } - - @Override - public Set listComponentIDs() throws IOException { - return Collections.emptySet(); - } - - @Override - public ComponentInfo loadComponentFiles(ComponentInfo ci) throws IOException { - return ci; - } - - @Override - public Set loadComponentMetadata(String id) throws IOException { - // no component is present - return null; - } - - @Override - public Map loadGraalVersionInfo() { - return Collections.unmodifiableMap(graalCaps); - } - - @Override - public Map> readReplacedFiles() throws IOException { - return Collections.emptyMap(); - } - - @Override - public void saveComponent(ComponentInfo info) throws IOException { - } - - @Override - public void updateReplacedFiles(Map> replacedFiles) throws IOException { - } - - @Override - public Date licenseAccepted(ComponentInfo info, String licenseID) { - return null; - } - - @Override - public void recordLicenseAccepted(ComponentInfo info, String licenseID, String licenseText, Date d) throws IOException { - } - - @Override - public Map> findAcceptedLicenses() { - return Collections.emptyMap(); - } - - @Override - public String licenseText(String licID) { - return ""; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/InfoCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/InfoCommand.java deleted file mode 100644 index 40b16d7f2f7d..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/InfoCommand.java +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.zip.ZipException; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_ERRORS; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_FILENAME; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_REQUIRES; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_PROBLEMS; -import org.graalvm.component.installer.ComponentInstaller; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.DependencyException; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerStopException; -import org.graalvm.component.installer.MetadataException; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.Verifier; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.shadowed.org.json.JSONArray; -import org.graalvm.shadowed.org.json.JSONObject; - -/** - * Command to query component bundles. - */ -public class InfoCommand extends QueryCommandBase { - private static final Map OPTIONS = new HashMap<>(); - - static { - OPTIONS.putAll(BASE_OPTIONS); - OPTIONS.putAll(ComponentInstaller.componentOptions); - - OPTIONS.put(Commands.OPTION_NO_VERIFY_JARS, ""); - OPTIONS.put(Commands.OPTION_FULL_PATHS, ""); - OPTIONS.put(Commands.OPTION_IGNORE_OPEN_ERRORS, ""); - OPTIONS.put(Commands.OPTION_SUPPRESS_TABLE, ""); - OPTIONS.put(Commands.OPTION_NO_DOWNLOAD_PROGRESS, ""); - - OPTIONS.put(Commands.LONG_OPTION_NO_VERIFY_JARS, Commands.OPTION_NO_VERIFY_JARS); - OPTIONS.put(Commands.LONG_OPTION_FULL_PATHS, Commands.OPTION_FULL_PATHS); - OPTIONS.put(Commands.LONG_OPTION_IGNORE_OPEN_ERRORS, Commands.OPTION_IGNORE_OPEN_ERRORS); - OPTIONS.put(Commands.LONG_OPTION_SUPPRESS_TABLE, Commands.OPTION_SUPPRESS_TABLE); - OPTIONS.put(Commands.LONG_OPTION_NO_DOWNLOAD_PROGRESS, Commands.OPTION_NO_DOWNLOAD_PROGRESS); - - OPTIONS.put(Commands.OPTION_VERSION, "s"); - OPTIONS.put(Commands.LONG_OPTION_VERSION, Commands.OPTION_VERSION); - - OPTIONS.put(Commands.OPTION_USE_EDITION, "s"); - OPTIONS.put(Commands.LONG_OPTION_USE_EDITION, Commands.OPTION_USE_EDITION); - } - - private boolean ignoreOpenErrors; - private boolean verifyJar; - private boolean fullPath; - private boolean suppressTable; - private Version.Match versionFilter; - private boolean noComponentPath; - - private final List components = new ArrayList<>(); - private final Map map = new HashMap<>(); - private final Map files = new HashMap<>(); - - @Override - public Map supportedOptions() { - return OPTIONS; - } - - public boolean isSuppressTable() { - return suppressTable; - } - - public void setSuppressTable(boolean suppressTable) { - this.suppressTable = suppressTable; - } - - public boolean isIgnoreOpenErrors() { - return ignoreOpenErrors; - } - - public void setIgnoreOpenErrors(boolean ignoreOpenErrors) { - this.ignoreOpenErrors = ignoreOpenErrors; - } - - public boolean isVerifyJar() { - return verifyJar; - } - - public void setVerifyJar(boolean verifyJar) { - this.verifyJar = verifyJar; - } - - public boolean isFullPath() { - return fullPath; - } - - public void setFullPath(boolean fullPath) { - this.fullPath = fullPath; - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - super.init(commandInput, feedBack); - ignoreOpenErrors = input.optValue(Commands.OPTION_IGNORE_OPEN_ERRORS) != null; - verifyJar = input.optValue(Commands.OPTION_NO_VERIFY_JARS) == null; - suppressTable = input.optValue(Commands.OPTION_SUPPRESS_TABLE) != null; - fullPath = input.optValue(Commands.OPTION_FULL_PATHS) != null; - - String vf = input.optValue(Commands.OPTION_VERSION); - if (vf != null) { - versionFilter = Version.versionFilter(vf); - } - - noComponentPath = !(input.hasOption(Commands.OPTION_FILES) || input.hasOption(Commands.OPTION_URLS)); - } - - void collectComponents() throws IOException { - for (Iterator it = input.existingFiles().matchVersion(versionFilter).allowIncompatible().iterator(); it.hasNext();) { - ComponentParam cp; - try { - cp = it.next(); - } catch (FailedOperationException ex) { - feedback.error("INFO_InvalidComponent", ex, ex.getLocalizedMessage()); - continue; - } - try { - // verifyjar set to false, as Verifier is not supported in SVM - // components.add(ldr = new ComponentPackageLoader(new JarFile(f, false), - // feedback)); - processComponentParam(cp); - } catch (ZipException ex) { - if (ignoreOpenErrors) { - feedback.error("INFO_ErrorOpeningBundle", ex, - cp.getDisplayName(), - ex.getLocalizedMessage()); - } else { - throw ex; - } - } catch (MetadataException ex) { - if (ignoreOpenErrors) { - feedback.error("INFO_CorruptedBundleMetadata", ex, - cp.getDisplayName(), - ex.getOffendingHeader(), - ex.getLocalizedMessage()); - } else { - throw ex; - } - } catch (IOException ex) { - if (ignoreOpenErrors) { - feedback.error("INFO_ErrorReadingBundle", ex, - cp.getDisplayName(), - ex.getLocalizedMessage()); - } else { - throw ex; - } - } - } - } - - @Override - public int execute() throws IOException { - if (input.optValue(Commands.OPTION_HELP) != null) { - feedback.output("INFO_Help"); - return 0; - } - if (!input.hasParameter()) { - feedback.error("INFO_MissingFilename", null); - return 1; - } - try { - collectComponents(); - printTable = getComponents().size() > 1 && !isVerbose() && !suppressTable; - super.printComponents(); - } finally { - for (ComponentParam c : components) { - try { - c.close(); - } catch (IOException ex) { - ComponentInfo ci = c.createMetaLoader().getComponentInfo(); - feedback.error("INFO_ClosingComponent", ex, - ci == null ? c.getSpecification() : shortenComponentId(ci), - ex.getLocalizedMessage()); - } - } - } - return 0; - } - - void processComponentParam(ComponentParam cp) throws IOException { - MetadataLoader ldr = cp.createMetaLoader(); - - components.add(cp); - loadComponentDetails(cp, ldr); - // registerFile(f, ldr.getComponentInfo(), ldr); - addComponent(cp, ldr.getComponentInfo()); - - } - - void registerFile(ComponentParam param, ComponentInfo info, MetadataLoader ldr) { - files.put(info, param); - map.put(info, ldr); - } - - void loadComponentDetails(ComponentParam param, MetadataLoader ldr) throws IOException { - ldr.infoOnly(true); - ComponentInfo info = ldr.getComponentInfo(); - registerFile(param, info, ldr); - if (isListFiles()) { - ldr.loadPaths(); - } - } - - @Override - void printHeader() { - if (printTable) { - if (fullPath) { - feedback.output("INFO_ComponentLongListHeader"); - } else if (noComponentPath) { - feedback.output("INFO_ComponentNoFileHeader"); - } else { - feedback.output("INFO_ComponentShortListHeader"); - } - } - } - - protected String filePath(ComponentInfo info) { - ComponentParam p = files.get(info); - if (fullPath) { - return p.getFullPath(); - } else { - String s = p.getShortName(); - int idx = s.lastIndexOf('.'); - return idx == -1 ? s : s.substring(0, idx); - } - } - - @Override - void printDetails(ComponentParam param, ComponentInfo info) { - if (isJson()) { - super.printDetails(param, info); - JSONObject jsonComponent = getJSONComponent(); - jsonComponent.put(JSON_KEY_COMPONENT_FILENAME, param.getFullPath()); - List keys = new ArrayList<>(info.getRequiredGraalValues().keySet()); - keys.remove(CommonConstants.CAP_GRAALVM_VERSION); - if (!keys.isEmpty()) { - JSONObject requires = new JSONObject(); - jsonComponent.put(JSON_KEY_COMPONENT_REQUIRES, requires); - Collections.sort(keys); - for (String cap : keys) { - requires.put(cap, info.getRequiredGraalValues().get(cap)); - } - } - MetadataLoader ldr = map.get(info); - List errs = ldr.getErrors(); - if (!errs.isEmpty()) { - JSONArray errors = new JSONArray(); - jsonComponent.put(JSON_KEY_COMPONENT_ERRORS, errors); - for (InstallerStopException ex : errs) { - errors.put(ex.getLocalizedMessage()); - } - } - Verifier vfy = new Verifier(feedback, input.getLocalRegistry(), catalog).collect(true).validateRequirements(info); - if (vfy.hasErrors()) { - JSONArray problems = new JSONArray(); - jsonComponent.put(JSON_KEY_COMPONENT_PROBLEMS, problems); - for (DependencyException ex : vfy.getErrors()) { - problems.put(ex.getLocalizedMessage()); - } - } - } else if (printTable) { - String line = String.format(feedback.l10n(fullPath ? "INFO_ComponentLongList" : (noComponentPath ? "INFO_ComponentShortListNoFile" : "INFO_ComponentShortList")), - shortenComponentId(info), val(info.getVersion().displayString()), val(info.getName()), - filePath(info), info.getStability().displayName(feedback)); - feedback.verbatimOut(line, false); - } else { - feedback.output("INFO_ComponentBasicInfo", - shortenComponentId(info), val(info.getVersion().displayString()), val(info.getName()), - param.getFullPath(), findRequiredGraalVMVersion(info), info.getStability().displayName(feedback)); - List keys = new ArrayList<>(info.getRequiredGraalValues().keySet()); - keys.remove(CommonConstants.CAP_GRAALVM_VERSION); - if (!keys.isEmpty() && feedback.verboseOutput("INFO_ComponentRequirementsHeader")) { - Collections.sort(keys); - for (String cap : keys) { - feedback.verboseOutput("INFO_ComponentRequirement", - getRegistry().localizeCapabilityName(cap), - info.getRequiredGraalValues().get(cap)); - } - } - MetadataLoader ldr = map.get(info); - List errs = ldr.getErrors(); - if (!errs.isEmpty()) { - feedback.message("INFO_ComponentBroken", files.get(info)); - for (InstallerStopException ex : errs) { - feedback.message("INFO_ComponentErrorIndent", ex.getLocalizedMessage()); - } - } - - Verifier vfy = new Verifier(feedback, input.getLocalRegistry(), catalog).collect(true).validateRequirements(info); - if (vfy.hasErrors()) { - feedback.message("INFO_ComponentWillNotInstall", shortenComponentId(info)); - for (DependencyException ex : vfy.getErrors()) { - feedback.message("INFO_ComponentDependencyIndent", ex.getLocalizedMessage()); - } - } - - } - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/InstallCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/InstallCommand.java deleted file mode 100644 index df612be2e3ed..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/InstallCommand.java +++ /dev/null @@ -1,804 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URL; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import java.util.regex.Pattern; -import java.util.zip.ZipException; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.ComponentInstaller; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.DependencyException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerCommand; -import org.graalvm.component.installer.InstallerStopException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.UserAbortException; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.DistributionType; -import org.graalvm.component.installer.model.Verifier; -import org.graalvm.component.installer.persist.MetadataLoader; - -/** - * Implementation of 'add' command. - */ -public class InstallCommand implements InstallerCommand { - private static final Logger LOG = Logger.getLogger(InstallCommand.class.getName()); - - private static final Map OPTIONS = new HashMap<>(); - - private CommandInput input; - private Feedback feedback; - private boolean ignoreFailures; - private boolean force; - private boolean validateBeforeInstall; - private boolean validateDownload; - private boolean allowUpgrades; - // verify archives by default - private boolean verifyJar = true; - /** - * Was a file:// component location encountered ? - */ - private boolean wasFile; - - private PostInstProcess postinstHelper; - - static { - OPTIONS.put(Commands.OPTION_DRY_RUN, ""); - OPTIONS.put(Commands.OPTION_FORCE, ""); - OPTIONS.put(Commands.OPTION_REPLACE_COMPONENTS, ""); - OPTIONS.put(Commands.OPTION_REPLACE_DIFFERENT_FILES, ""); - OPTIONS.put(Commands.OPTION_VALIDATE, ""); - OPTIONS.put(Commands.OPTION_VALIDATE_DOWNLOAD, ""); - OPTIONS.put(Commands.OPTION_IGNORE_FAILURES, ""); - OPTIONS.put(Commands.OPTION_FAIL_EXISTING, ""); - OPTIONS.put(Commands.OPTION_NO_DOWNLOAD_PROGRESS, ""); - OPTIONS.put(Commands.OPTION_NO_VERIFY_JARS, ""); - OPTIONS.put(Commands.OPTION_LOCAL_DEPENDENCIES, ""); - OPTIONS.put(Commands.OPTION_NO_DEPENDENCIES, ""); - - OPTIONS.put(Commands.LONG_OPTION_DRY_RUN, Commands.OPTION_DRY_RUN); - OPTIONS.put(Commands.LONG_OPTION_FORCE, Commands.OPTION_FORCE); - OPTIONS.put(Commands.LONG_OPTION_REPLACE_COMPONENTS, Commands.OPTION_REPLACE_COMPONENTS); - OPTIONS.put(Commands.LONG_OPTION_REPLACE_DIFFERENT_FILES, Commands.OPTION_REPLACE_DIFFERENT_FILES); - OPTIONS.put(Commands.LONG_OPTION_VALIDATE, Commands.OPTION_VALIDATE); - OPTIONS.put(Commands.LONG_OPTION_VALIDATE_DOWNLOAD, Commands.OPTION_VALIDATE_DOWNLOAD); - OPTIONS.put(Commands.LONG_OPTION_IGNORE_FAILURES, Commands.OPTION_IGNORE_FAILURES); - OPTIONS.put(Commands.LONG_OPTION_FAIL_EXISTING, Commands.OPTION_FAIL_EXISTING); - OPTIONS.put(Commands.LONG_OPTION_NO_DOWNLOAD_PROGRESS, Commands.OPTION_NO_DOWNLOAD_PROGRESS); - OPTIONS.put(Commands.LONG_OPTION_NO_VERIFY_JARS, Commands.OPTION_NO_VERIFY_JARS); - OPTIONS.put(Commands.LONG_OPTION_LOCAL_DEPENDENCIES, Commands.OPTION_LOCAL_DEPENDENCIES); - OPTIONS.put(Commands.LONG_OPTION_NO_DEPENDENCIES, Commands.OPTION_NO_DEPENDENCIES); - - OPTIONS.put(Commands.OPTION_USE_EDITION, "s"); - OPTIONS.put(Commands.LONG_OPTION_USE_EDITION, Commands.OPTION_USE_EDITION); - - OPTIONS.putAll(ComponentInstaller.componentOptions); - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - this.input = commandInput; - this.feedback = feedBack; - - ignoreFailures = this.input.optValue(Commands.OPTION_IGNORE_FAILURES) != null; - validateBeforeInstall = this.input.optValue(Commands.OPTION_VALIDATE) != null; - validateDownload = this.input.optValue(Commands.OPTION_VALIDATE_DOWNLOAD) != null; - verifyJar = input.optValue(Commands.OPTION_NO_VERIFY_JARS) == null; - postinstHelper = new PostInstProcess(input, feedBack); - } - - public boolean isVerifyJar() { - return verifyJar; - } - - public void setVerifyJar(boolean verifyJar) { - this.verifyJar = verifyJar; - } - - public boolean isAllowUpgrades() { - return allowUpgrades; - } - - public void setAllowUpgrades(boolean allowUpgrades) { - this.allowUpgrades = allowUpgrades; - } - - @Override - public Map supportedOptions() { - return OPTIONS; - } - - public InstallCommand() { - } - - /** - * Installers attached to individual parameters. - */ - Map realInstallers = new LinkedHashMap<>(); - - /** - * Original (possibly catalog) ComponentInfos. - */ - Map parameterInfos = new LinkedHashMap<>(); - - private String current; - - private StringBuilder parameterList = new StringBuilder(); - - /** - * Minimum required GraalVM version for the to-be-installed content. - */ - private Version minRequiredGraalVersion; - - protected void executionInit() throws IOException { - input.getLocalRegistry().verifyAdministratorAccess(); - input.existingFiles().setVerifyJars(verifyJar); - - minRequiredGraalVersion = input.getLocalRegistry().getGraalVersion(); - } - - @Override - public int execute() throws IOException { - executionInit(); - if (input.optValue(Commands.OPTION_HELP) != null) { - feedback.output("INSTALL_Help"); - return 0; - } - if (!input.hasParameter()) { - feedback.output("INSTALL_ParametersMissing"); - return 1; - } - if (input.optValue(Commands.OPTION_LOCAL_DEPENDENCIES) != null && - input.optValue(Commands.OPTION_FILES) == null) { - feedback.error("INSTALL_WarnLocalDependencies", null); - } - try { - executeStep(this::prepareInstallation, false); - if (validateBeforeInstall) { - return 0; - } - executeStep(this::acceptLicenses, false); - executeStep(this::completeInstallers, false); - executeStep(this::acceptLicenses, false); - executeStep(this::doInstallation, false); - // execute the post-install steps for all processed installers - executeStep(this::printMessages, true); - } finally { - for (Map.Entry e : realInstallers.entrySet()) { - ComponentParam p = e.getKey(); - Installer i = e.getValue(); - p.close(); - if (i != null) { - i.close(); - } - } - } - return 0; - } - - /** - * License IDs processed by the user. - */ - private Set processedLicenses = new HashSet<>(); - - /** - * Licenses, which must be accepted at most before the installation. - */ - private Map> licensesToAccept = new LinkedHashMap<>(); - - /** - * Adds a license to be accepted. Does not add a license ID that has been already processed in - * previous round(s). - * - * @param id license ID - * @param ldr loader that can deliver the license details. - */ - void addLicenseToAccept(String id, MetadataLoader ldr) { - if (processedLicenses.contains(id)) { - return; - } - licensesToAccept.computeIfAbsent(id, (x) -> new ArrayList<>()).add(ldr); - } - - protected Version.Match matchInstallVesion() { - return input.getLocalRegistry().getGraalVersion().match( - allowUpgrades ? Version.Match.Type.INSTALLABLE : Version.Match.Type.COMPATIBLE); - } - - public void addLicenseToAccept(Installer inst, MetadataLoader ldr) { - if (ldr.getLicenseType() != null) { - String path = ldr.getLicensePath(); - if (inst != null && path != null) { - if (!SystemUtils.isRemotePath(path)) { - inst.setLicenseRelativePath(SystemUtils.fromCommonRelative(ldr.getLicensePath())); - } - } - addLicenseToAccept(ldr); - } - } - - public void addLicenseToAccept(MetadataLoader ldr) { - String licId = ldr.getLicenseID(); - if (licId == null) { - String tp = ldr.getLicenseType(); - if (tp == null) { - return; - } - if (Pattern.matches("[-_., 0-9A-Za-z]+", tp)) { // NOI18N - licId = tp; - } else { - // better make a digest - try { - MessageDigest dg = MessageDigest.getInstance("SHA-256"); // NOI18N - byte[] result = dg.digest(tp.getBytes("UTF-8")); - licId = SystemUtils.fingerPrint(result, false); - } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) { - feedback.error("INSTALL_CannotDigestLicense", ex, ex.getLocalizedMessage()); - licId = Integer.toHexString(tp.hashCode()); - } - } - } - addLicenseToAccept(licId, ldr); - } - - /** - * Implied dependencies discovered during preparation. - */ - private List dependencies = new ArrayList<>(); - private Map> dependencyMap = new HashMap<>(); - - /** - * Unresolved dependencies, which will be reported all at once. - */ - private Set unresolvedDependencies = new HashSet<>(); - private Set knownDeps = new HashSet<>(); - - void cleanDependencies() { - dependencies = new ArrayList<>(); - // do not clean knownDeps, prevents duplicates. - } - - public List getDependencies() { - return Collections.unmodifiableList(dependencies); - } - - void addDependencies(ComponentInfo ci) { - if (input.hasOption(Commands.OPTION_NO_DEPENDENCIES)) { - return; - } - - // dependencies are scanned breadth-first; so the deeper dependencies are - // later in the iterator order. Installers from dependencies will be reversed - // in registerComponent - Set deps = new LinkedHashSet<>(); - - LOG.log(Level.FINE, "Inspecting dependencies of {0}", ci); - Set errors = input.getRegistry().findDependencies(ci, true, Boolean.FALSE, deps); - LOG.log(Level.FINE, "Direct dependencies: {0}, errors: {1}", new Object[]{deps, errors}); - if (errors != null) { - unresolvedDependencies.addAll(errors); - for (String s : errors) { - dependencyMap.computeIfAbsent(s, (id) -> new HashSet<>()).add(ci); - } - } - - for (ComponentInfo i : deps) { - // knownDeps may contain multiple component versions, this - // will be sorted later, when converting to Installers. - if (!knownDeps.add(i)) { - continue; - } - ComponentParam p = input.existingFiles().createParam(i.getId(), i); - dependencies.add(p); - dependencyMap.computeIfAbsent(i.getId(), (id) -> new HashSet<>()).add(ci); - } - } - - void printRequiredComponents() throws IOException { - if (dependencies.isEmpty()) { - return; - } - feedback.output("INSTALL_RequiredDependencies"); - for (ComponentParam p : dependencies) { - ComponentInfo ci = p.createMetaLoader().getComponentInfo(); - feedback.output("INSTALL_RequiredDependencyLine", p.getDisplayName(), ci.getId(), ci.getVersion().displayString(), - printComponentList(dependencyMap.get(ci.getId()))); - } - } - - boolean verifyInstaller(Installer inst) { - ComponentInfo info = inst.getComponentInfo(); - Verifier vrf = inst.createVerifier(); - vrf.setVersionMatch(matchInstallVesion()); - vrf.validateRequirements(info); - boolean keep = force || vrf.shouldInstall(info); - if (!keep) { - // component will be skipped, do not bother with validation - feedback.output("INSTALL_ComponentAlreadyInstalled", inst.getComponentInfo().getName(), inst.getComponentInfo().getId()); - return false; - } - ComponentInfo existing = input.getLocalRegistry().findComponent(info.getId()); - if (existing != null) { - // will refuse to install existing bundled components: - if (existing.getDistributionType() != DistributionType.OPTIONAL) { - throw new DependencyException.Conflict( - existing.getId(), info.getVersionString(), existing.getVersionString(), - feedback.l10n("INSTALL_CannotReplaceBundledComponent", - existing.getName(), existing, existing.getVersionString())); - } - } - Version minV = vrf.getMinVersion(); - if (minV != null && minV.compareTo(this.minRequiredGraalVersion) > 0) { - minRequiredGraalVersion = minV; - } - addDependencies(info); - return true; - } - - String printComponentList(Collection requestors) { - if (requestors == null || requestors.isEmpty()) { - return ""; // NOI18N - } - StringBuilder sb = new StringBuilder(); - List infos = new ArrayList<>(requestors); - Collections.sort(infos, (c1, c2) -> c1.getId().compareTo(c2.getId())); - for (ComponentInfo i : infos) { - if (sb.length() > 0) { - sb.append(", "); - } - sb.append(feedback.l10n("INSTALL_RequiredDependencyItem", i.getName(), i.getId())); - } - return feedback.l10n("INSTALL_RequiredDependencySuffix", sb.toString()); - } - - void checkDependencyErrors() { - if (unresolvedDependencies.isEmpty()) { - return; - } - feedback.error("INSTALL_UnknownComponents", null); - List ordered = new ArrayList<>(unresolvedDependencies); - Collections.sort(ordered); - for (String s : ordered) { - feedback.error("INSTALL_UnknownComponentLine", null, s, - printComponentList(dependencyMap.get(s))); - } - if (!input.getRegistry().isRemoteEnabled()) { - feedback.error("INSTALL_UnknownComponentsNote1", null, parameterList.toString()); - } - if (wasFile && !input.hasOption(Commands.OPTION_LOCAL_DEPENDENCIES)) { - feedback.error("INSTALL_UnknownComponentsNote2", null, parameterList.toString()); - } - throw feedback.failure("INSTALL_UnresolvedDependencies", null); - } - - private void appendParameterText() { - String s = input.peekParameter(); - if (parameterList.length() > 0) { - parameterList.append(" "); // NOI18N - } - parameterList.append(s); - } - - /** - * True during dependency processing. Dependencies should be inserted at the start, so their - * order is reversed (most deepest dependencies first). That means that if a component already - * exists, it must be reinserted at the start. - */ - private boolean installDependencies; - - protected boolean registerComponent(Installer inst, ComponentParam p) throws IOException { - ComponentInfo info = inst.getComponentInfo(); - Installer existing = installerMap.get(info.getId()); - - Installer removedInstaller = null; - - if (existing == null) { - installerMap.put(info.getId(), inst); - if (installDependencies) { - installers.add(0, inst); - } else { - installers.add(inst); - } - return true; - } else { - int i = installers.indexOf(existing); - ComponentInfo exInfo = existing.getComponentInfo(); - int newer = exInfo.getVersion().compareTo(info.getVersion()); - if (newer < 0) { - feedback.verboseOutput("INSTALL_UsingNewerComponent", info.getId(), info.getName(), - info.getVersion().displayString(), exInfo.getVersion().displayString()); - - removedInstaller = installerMap.put(info.getId(), inst); - if (installDependencies) { - // must reinsert at the start: later items may depend on this one - installers.remove(i); - installers.add(0, inst); - } else { - // replace at the same position, to mainain commandline order - installers.set(i, inst); - } - existing.close(); - if (removedInstaller != null) { - realInstallers.remove(p); - } - return true; - } else { - Installer toReplace = inst.isComplete() ? inst : existing; - // if dependencies are processed, move the installer to the front - // of the work queue, to maintain the depenency-first order. - if (installDependencies) { - installers.remove(existing); - installers.add(0, toReplace); - installerMap.put(info.getId(), toReplace); - } else if (!existing.isComplete() && inst.isComplete()) { - // replace proxy for real installer: - installers.set(i, toReplace); - installerMap.put(info.getId(), toReplace); - } - - return false; - } - } - } - - protected void processComponents(Iterable toProcess) throws IOException { - for (Iterator it = toProcess.iterator(); it.hasNext();) { - appendParameterText(); - ComponentParam p = it.next(); - feedback.output(p.isComplete() ? "INSTALL_VerboseProcessingArchive" : "INSTALL_VerboseProcessingComponent", p.getDisplayName()); - current = p.getSpecification(); - MetadataLoader ldr = validateDownload ? p.createFileLoader() : p.createMetaLoader(); - Installer inst = createInstaller(p, ldr); - if (!verifyInstaller(inst)) { - continue; - } - if (registerComponent(inst, p)) { - addLicenseToAccept(inst, ldr); - if (p.isComplete()) { - // null realInstaller will be handled in completeInstallers() later. - realInstallers.put(p, inst); - } else { - realInstallers.put(p, null); - } - } - current = null; - - URL remote = ldr.getComponentInfo().getRemoteURL(); - if (remote == null || remote.getProtocol().equalsIgnoreCase("file")) { - wasFile = true; - } - } - - } - - protected void prevalidateInstallers() throws IOException { - for (Installer i : new ArrayList<>(installers)) { - if (validateBeforeInstall) { - current = i.getComponentInfo().getName(); - i.validateAll(); - } - } - } - - protected void prepareInstallation() throws IOException { - processComponents(input.existingFiles()); - // first check after explicit components have been processed. - checkDependencyErrors(); - if (dependencies.isEmpty()) { - return; - } - // dependencies were scanned recursively; so just one additional pass should - // be sufficient - try { - installDependencies = true; - processComponents(new ArrayList<>(dependencies)); - } finally { - installDependencies = false; - } - printRequiredComponents(); - checkDependencyErrors(); - prevalidateInstallers(); - } - - public void setIgnoreFailures(boolean ignoreFailures) { - this.ignoreFailures = ignoreFailures; - } - - public void setForce(boolean force) { - this.force = force; - } - - public void setValidateBeforeInstall(boolean validateBeforeInstall) { - this.validateBeforeInstall = validateBeforeInstall; - } - - public void setValidateDownload(boolean validateDownload) { - this.validateDownload = validateDownload; - } - - void executeStep(Step s, boolean close) throws IOException { - boolean ok = false; - try { - s.execute(); - ok = true; - } catch (ZipException ex) { - feedback.error("INSTALL_InvalidComponentArchive", ex, current); - throw ex; - } catch (UserAbortException ex) { - throw ex; - } catch (InstallerStopException | IOException ex) { - if (ignoreFailures) { - if (current == null) { - feedback.error("INSTALL_IgnoreFailedInstallation", ex, - ex.getLocalizedMessage()); - } else { - feedback.error("INSTALL_IgnoreFailedInstallation2", ex, - current, ex.getLocalizedMessage()); - } - } else { - if (current != null) { - feedback.error("INSTALL_ErrorDuringProcessing", ex, current, ex.getLocalizedMessage()); - } - throw ex; - } - } finally { - if (!ok) { - for (Installer inst : executedInstallers) { - inst.revertInstall(); - } - } - if (close || !ok) { - for (Installer inst : installers) { - try { - inst.close(); - } catch (IOException ex) { - // expected - } - } - } - } - } - - interface Step { - void execute() throws IOException; - } - - void printMessages() { - postinstHelper.run(); - } - - /** - * Creates installers with complete info. Revalidates the installers as they are now complete. - */ - void completeInstallers() throws IOException { - List allDependencies = new ArrayList<>(); - List in = new ArrayList<>(realInstallers.keySet()); - do { - cleanDependencies(); - completeInstallers0(in); - allDependencies.addAll(dependencies); - in = dependencies; - // print required components prior to download - printRequiredComponents(); - installDependencies = true; - } while (!in.isEmpty()); - dependencies = allDependencies; - checkDependencyErrors(); - } - - void completeInstallers0(List in) throws IOException { - // now fileName real installers for parameters which were omitted - for (ComponentParam p : in) { - Installer i = realInstallers.get(p); - if (i == null) { - MetadataLoader floader = p.createFileLoader(); - ComponentInfo initialInfo = parameterInfos.get(p); - ComponentInfo finfo = floader.getComponentInfo(); - if (initialInfo != null && (!initialInfo.getId().equals(finfo.getId()) || - !initialInfo.getVersion().equals(finfo.getVersion()))) { - String msg = String.format( - feedback.l10n("@INSTALL_Error_ComponentDiffers_Report"), - initialInfo.getId(), finfo.getId(), - initialInfo.getVersionString(), finfo.getVersionString()); - feedback.verbatimPart(msg, true, false); - throw feedback.failure("INSTALL_Error_ComponentDiffers", null); - } - i = createInstaller(p, floader); - if (!verifyInstaller(i)) { - continue; - } - addLicenseToAccept(i, floader); - registerComponent(i, p); - - if (validateBeforeInstall) { - current = i.getComponentInfo().getName(); - i.validateAll(); - } else { - if (!force) { - i.validateRequirements(); - } - } - realInstallers.put(p, i); - } - } - } - - void doInstallation() throws IOException { - for (Installer i : installers) { - current = i.getComponentInfo().getName(); - ensureExistingComponentRemoved(i.getComponentInfo()); - executedInstallers.add(i); - - i.setComponentDirectories(input.getLocalRegistry().getComponentDirectories()); - i.install(); - postinstHelper.addComponentInfo(i.getComponentInfo()); - } - } - - void ensureExistingComponentRemoved(ComponentInfo info) throws IOException { - String componentId = info.getId(); - ComponentInfo oldInfo = input.getLocalRegistry().loadSingleComponent(componentId, true); - if (oldInfo == null) { - feedback.output("INSTALL_InstallNewComponent", - info.getId(), info.getName(), info.getVersionString()); - } else { - Uninstaller uninstaller = new Uninstaller(feedback, - input.getFileOperations(), oldInfo, input.getLocalRegistry()); - uninstaller.setInstallPath(input.getGraalHomePath()); - uninstaller.setDryRun(input.optValue(Commands.OPTION_DRY_RUN) != null); - uninstaller.setPreservePaths( - new HashSet<>(input.getLocalRegistry().getPreservedFiles(oldInfo))); - - feedback.output("INSTALL_RemoveExistingComponent", - oldInfo.getId(), oldInfo.getName(), oldInfo.getVersionString(), - info.getId(), info.getName(), info.getVersionString()); - uninstaller.uninstall(); - } - } - - /** - * Installers for individual component IDs. - */ - private final Map installerMap = new HashMap<>(); - - /** - * The installation sequence; dependencies first. - */ - private final List installers = new ArrayList<>(); - private final List executedInstallers = new ArrayList<>(); - - List getInstallers() { - return installers; - } - - protected void configureInstaller(Installer inst) { - inst.setInstallPath(input.getGraalHomePath()); - inst.setDryRun(input.optValue(Commands.OPTION_DRY_RUN) != null); - force = input.optValue(Commands.OPTION_FORCE) != null; - - inst.setFailOnExisting(input.optValue(Commands.OPTION_FAIL_EXISTING) != null); - inst.setReplaceComponents(force || input.optValue(Commands.OPTION_REPLACE_COMPONENTS) != null); - inst.setIgnoreRequirements(force); - inst.setReplaceDiferentFiles(force || input.optValue(Commands.OPTION_REPLACE_DIFFERENT_FILES) != null); - if (validateBeforeInstall) { - inst.setDryRun(true); - } - } - - Map permissions; - Map symlinks; - ComponentInfo fullInfo; - - Installer createInstaller(ComponentParam p, MetadataLoader ldr) throws IOException { - ComponentInfo partialInfo; - partialInfo = ldr.getComponentInfo(); - parameterInfos.putIfAbsent(p, partialInfo); - feedback.verboseOutput("INSTALL_PrepareToInstall", - p.getDisplayName(), - partialInfo.getId(), - partialInfo.getVersionString(), - partialInfo.getName()); - ldr.loadPaths(); - Archive a = null; - if (p.isComplete()) { - a = ldr.getArchive(); - a.verifyIntegrity(input); - } - Installer inst = new Installer(feedback, - input.getFileOperations(), - partialInfo, input.getLocalRegistry(), - input.getRegistry(), a); - inst.setPermissions(ldr.loadPermissions()); - inst.setSymlinks(ldr.loadSymlinks()); - configureInstaller(inst); - return inst; - - } - - CommandInput getInput() { - return input; - } - - Feedback getFeedback() { - return feedback; - } - - protected Map> getLicensesToAccept() { - return licensesToAccept; - } - - protected LicensePresenter createLicensePresenter() { - return new LicensePresenter(feedback, input.getLocalRegistry(), licensesToAccept); - } - - /** - * Forces the user to accept the licenses. - * - * @throws IOException - */ - void acceptLicenses() throws IOException { - if (licensesToAccept.isEmpty()) { - return; - } - Set processed = new HashSet<>(licensesToAccept.keySet()); - createLicensePresenter().run(); - processed.removeAll(licensesToAccept.keySet()); - markLicensesProcessed(processed); - licensesToAccept.clear(); - } - - public Set getProcessedLicenses() { - return new HashSet<>(processedLicenses); - } - - public void markLicensesProcessed(Collection licenseIDs) { - processedLicenses.addAll(licenseIDs); - } - - public Set getUnresolvedDependencies() { - return Collections.unmodifiableSet(unresolvedDependencies); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Installer.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Installer.java deleted file mode 100644 index 85397748f7b3..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Installer.java +++ /dev/null @@ -1,460 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.channels.ByteChannel; -import java.nio.file.Files; -import java.nio.file.LinkOption; -import java.nio.file.Path; -import java.nio.file.attribute.PosixFilePermission; -import java.nio.file.attribute.PosixFilePermissions; -import java.util.ArrayList; -import java.util.Collections; -import java.util.EnumSet; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileOperations; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.Verifier; - -/** - * The working internals of the 'add' command. - */ -public class Installer extends AbstractInstaller { - private static final Logger LOG = Logger.getLogger(Installer.class.getName()); - - /** - * Default permisions for files that should have the permissions changed. - */ - private static final Set DEFAULT_CHANGE_PERMISSION = EnumSet.of( - PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE, PosixFilePermission.OWNER_EXECUTE, - PosixFilePermission.GROUP_READ, PosixFilePermission.GROUP_EXECUTE, - PosixFilePermission.OTHERS_READ, PosixFilePermission.OTHERS_EXECUTE); - - private final List filesToDelete = new ArrayList<>(); - private final List dirsToDelete = new ArrayList<>(); - - private boolean allowFilesInComponentDir; - /** - * Paths tracked by the component system. - */ - private final Set visitedPaths = new HashSet<>(); - - public Installer(Feedback feedback, FileOperations fileOps, ComponentInfo componentInfo, ComponentRegistry registry, ComponentCollection collection, Archive a) { - super(feedback, fileOps, componentInfo, registry, collection, a); - } - - public boolean isAllowFilesInComponentDir() { - return allowFilesInComponentDir; - } - - public void setAllowFilesInComponentDir(boolean allowFilesInComponentDir) { - this.allowFilesInComponentDir = allowFilesInComponentDir; - } - - @Override - public void revertInstall() { - if (isDryRun()) { - return; - } - LOG.fine("Reverting installation"); - for (Path p : filesToDelete) { - try { - LOG.log(Level.FINE, "Deleting: {0}", p); - feedback.verboseOutput("INSTALL_CleanupFile", p); - fileOps.deleteFile(p); - } catch (IOException ex) { - feedback.error("INSTALL_CannotCleanupFile", ex, p, ex.getLocalizedMessage()); - } - } - // reverse the contents of directories, last created first: - Collections.reverse(dirsToDelete); - for (Path p : dirsToDelete) { - try { - LOG.log(Level.FINE, "Deleting directory: {0}", p); - feedback.verboseOutput("INSTALL_CleanupDirectory", p); - fileOps.deleteFile(p); - } catch (IOException ex) { - feedback.error("INSTALL_CannotCleanupFile", ex, p, ex.getLocalizedMessage()); - } - } - } - - Path translateTargetPath(Archive.FileEntry entry) { - return translateTargetPath(entry.getName()); - } - - Path translateTargetPath(String n) { - return translateTargetPath(null, n); - } - - Path translateTargetPath(Path base, String n) { - Path rel; - // assert relative path - rel = SystemUtils.fromCommonRelative(base, n); - Path p = getInstallPath().resolve(rel).normalize(); - // confine into graalvm subdir - if (!p.startsWith(getInstallPath())) { - throw new IllegalStateException( - feedback.l10n("INSTALL_WriteOutsideGraalvm", p)); - } - return p; - } - - /** - * Validates requirements, decides whether to install. Returns false if the component should be - * skipped. - * - * @return true, if the component should be installed - * @throws IOException - */ - @Override - public boolean validateAll() throws IOException { - Verifier veri = validateRequirements(); - ComponentInfo existing = registry.findComponent(componentInfo.getId()); - if (existing != null) { - if (!veri.shouldInstall(componentInfo)) { - return false; - } - } - validateFiles(); - validateSymlinks(); - return true; - } - - @Override - public void validateFiles() throws IOException { - if (archive == null) { - throw new UnsupportedOperationException(); - } - for (Archive.FileEntry entry : archive) { - if (entry.getName().startsWith("META-INF")) { // NOI18N - continue; - } - feedback.verboseOutput("INSTALL_VerboseValidation", entry.getName()); - validateOneEntry(translateTargetPath(entry), entry); - } - } - - @Override - public void validateSymlinks() throws IOException { - Map processSymlinks = getSymlinks(); - for (String sl : processSymlinks.keySet()) { - Path target = fileOps.materialize(translateTargetPath(sl), true); - if (Files.exists(target, LinkOption.NOFOLLOW_LINKS)) { - checkLinkReplacement(target, - translateTargetPath(target, processSymlinks.get(sl))); - } - } - } - - boolean validateOneEntry(Path target, Archive.FileEntry entry) throws IOException { - if (entry.isDirectory()) { - // assert relative path - Path dirPath = fileOps.materialize(SystemUtils.resolveRelative(getInstallPath(), entry.getName()), false); - // confine into graalvm subdir - if (Files.exists(dirPath)) { - if (!Files.isDirectory(dirPath)) { - throw new IOException( - feedback.l10n("INSTALL_OverwriteWithDirectory", dirPath)); - } - } - return true; - } - Path mt = fileOps.materialize(target, false); - boolean existingFile = mt != null && Files.exists(mt, LinkOption.NOFOLLOW_LINKS); - if (existingFile) { - return checkFileReplacement(mt, entry); - } - return false; - } - - public void install() throws IOException { - assert archive != null : "Must first download / set jar file"; - installContent(); - installFinish(); - } - - void installContent() throws IOException { - if (archive == null) { - throw new UnsupportedOperationException(); - } - // unpack files - unpackFiles(); - archive.completeMetadata(componentInfo); - processPermissions(); - createSymlinks(); - - List ll = new ArrayList<>(getTrackedPaths()); - Collections.sort(ll); - // replace paths with the really tracked ones - componentInfo.setPaths(ll); - } - - void installFinish() throws IOException { - // installation succeeded, add to component registry - if (!isDryRun()) { - registry.addComponent(getComponentInfo()); - } - } - - void unpackFiles() throws IOException { - final String storagePrefix = CommonConstants.PATH_COMPONENT_STORAGE + "/"; // NOI18N - for (Archive.FileEntry entry : archive) { - String path = entry.getName(); - if (!allowFilesInComponentDir && path.startsWith(storagePrefix) && path.length() > storagePrefix.length()) { - // disallow to unpack files in the component database (but permit subdirs). Some - // tools may write there, but - // GU will manage the storage itself. - if (path.indexOf('/', storagePrefix.length()) == -1) { - continue; - } - } - installOneEntry(entry); - } - } - - void ensurePathExists(Path targetPath) throws IOException { - if (!visitedPaths.add(targetPath)) { - return; - } - Path parent = getInstallPath(); - if (!targetPath.normalize().startsWith(parent)) { - throw new IllegalStateException( - feedback.l10n("INSTALL_WriteOutsideGraalvm", targetPath)); - } - Path relative = getInstallPath().relativize(targetPath); - Path relativeSubpath; - int count = 0; - for (Path n : relative) { - count++; - relativeSubpath = relative.subpath(0, count); - Path dir = fileOps.materialize(parent.resolve(n), true); - String pathString = SystemUtils.toCommonPath(relativeSubpath) + "/"; // NOI18N - - // Need to track either directories, which do not exist (and will be created) - // AND directories created by other components. - if (!Files.exists(dir) || getComponentDirectories().contains(pathString)) { - feedback.verboseOutput("INSTALL_CreatingDirectory", dir); - dirsToDelete.add(dir); - // add the created directory to the installed file list - addTrackedPath(pathString); - if (!Files.exists(dir)) { - if (!isDryRun()) { - Files.createDirectory(dir); - } - } - } - parent = dir; - } - } - - Path installOneEntry(Archive.FileEntry entry) throws IOException { - if (entry.getName().startsWith("META-INF")) { // NOI18N - return null; - } - Path targetPath = translateTargetPath(entry); - boolean b = validateOneEntry(targetPath, entry); - if (entry.isDirectory()) { - ensurePathExists(targetPath); - return targetPath; - } else { - String eName = entry.getName(); - if (b) { - feedback.verboseOutput("INSTALL_SkipIdenticalFile", eName); - return targetPath; - } - return installOneFile(targetPath, entry); - } - } - - Path installOneFile(Path target, Archive.FileEntry entry) throws IOException { - // copy contents of the file - try (InputStream jarStream = archive.getInputStream(entry)) { - Path mt = fileOps.materialize(target, false); - Path mt2 = fileOps.materialize(target, true); - boolean existingFile = mt != null && Files.exists(mt, LinkOption.NOFOLLOW_LINKS); - String eName = entry.getName(); - if (existingFile) { - /* - * if (checkFileReplacement(target, entry)) { - * feedback.verboseOutput("INSTALL_SkipIdenticalFile", eName); return target; // - * same file, not replacing, skip to next file } - */ - feedback.verboseOutput("INSTALL_ReplacingFile", eName); - } else { - filesToDelete.add(mt2); - feedback.verboseOutput("INSTALL_InstallingFile", eName); - } - ensurePathExists(target.getParent()); - addTrackedPath(SystemUtils.toCommonPath(getInstallPath().relativize(target))); - if (!isDryRun()) { - fileOps.installFile(target, jarStream); - } - } - return target; - } - - @Override - public void processPermissions() throws IOException { - Map setPermissions = getPermissions(); - List paths = new ArrayList<>(setPermissions.keySet()); - Collections.sort(paths); - for (String s : paths) { - // assert relative path - Path target = getInstallPath().resolve(SystemUtils.fromCommonRelative(s)); - String permissionString = setPermissions.get(s); - Set perms; - if (permissionString != null && !"".equals(permissionString)) { - perms = PosixFilePermissions.fromString(permissionString); - } else { - perms = DEFAULT_CHANGE_PERMISSION; - } - if (Files.exists(target, LinkOption.NOFOLLOW_LINKS)) { - fileOps.setPermissions(target, perms); - } - } - } - - @Override - public void createSymlinks() throws IOException { - if (SystemUtils.isWindows()) { - return; - } - Map makeSymlinks = getSymlinks(); - List createdRelativeLinks = new ArrayList<>(); - try { - List paths = new ArrayList<>(makeSymlinks.keySet()); - Collections.sort(paths); - Path instDir = getInstallPath(); - for (String s : paths) { - // assert relative path - Path source = instDir.resolve(SystemUtils.fromCommonRelative(s)); - if (source == null) { - continue; - } - Path parent = source.getParent(); - if (parent == null) { - continue; - } - Path target = SystemUtils.fromCommonString(makeSymlinks.get(s)); - Path result = parent.resolve(target); - if (result == null) { - continue; - } - result = result.normalize(); - if (!result.startsWith(getInstallPath())) { - throw new IllegalStateException( - feedback.l10n("INSTALL_SymlinkOutsideGraalvm", source, result)); - } - ensurePathExists(source.getParent()); - createdRelativeLinks.add(s); - addTrackedPath(s); - // TODO: check if the symlink does not exist and if so, whether - // reads the same. Behaviour similar to file CRC check. - if (Files.exists(source, LinkOption.NOFOLLOW_LINKS)) { - if (checkLinkReplacement(source, target)) { - feedback.verboseOutput("INSTALL_SkipIdenticalFile", s); - filesToDelete.add(source); - continue; - } else { - feedback.verboseOutput("INSTALL_ReplacingFile", s); - Files.delete(source); - } - } - filesToDelete.add(source); - feedback.verboseOutput("INSTALL_CreatingSymlink", s, makeSymlinks.get(s)); - if (!isDryRun()) { - Files.createSymbolicLink(source, target); - } - } - } catch (UnsupportedOperationException ex) { - LOG.log(Level.INFO, "Symlinks not supported", ex); - } - componentInfo.addPaths(createdRelativeLinks); - } - - boolean checkLinkReplacement(Path existingPath, Path target) throws IOException { - boolean replace = isReplaceDiferentFiles(); - if (Files.exists(existingPath, LinkOption.NOFOLLOW_LINKS)) { - if (!Files.isSymbolicLink(existingPath)) { - if (Files.isRegularFile(existingPath) && replace) { - return false; - } - throw new IOException( - feedback.l10n("INSTALL_OverwriteWithLink", existingPath)); - } - } - Path p = Files.readSymbolicLink(existingPath); - if (!target.equals(p)) { - if (replace) { - return false; - } - throw feedback.failure("INSTALL_ReplacedFileDiffers", null, existingPath); - } - return true; - } - - boolean checkFileReplacement(Path existingPath, Archive.FileEntry entry) throws IOException { - boolean replace = isReplaceDiferentFiles(); - if (Files.isDirectory(existingPath)) { - throw new IOException( - feedback.l10n("INSTALL_OverwriteWithFile", existingPath)); - } - if (!Files.isRegularFile(existingPath) || (Files.size(existingPath) != entry.getSize())) { - if (replace) { - return false; - } - throw feedback.failure("INSTALL_ReplacedFileDiffers", null, existingPath); - } - try (ByteChannel is = Files.newByteChannel(existingPath)) { - if (!archive.checkContentsMatches(is, entry)) { - if (replace) { - return false; - } - throw feedback.failure("INSTALL_ReplacedFileDiffers", null, existingPath); - } - } - return true; - } - - @Override - public String toString() { - return "Installer[" + componentInfo.getId() + ":" + componentInfo.getName() + "=" + componentInfo.getVersion().displayString() + "]"; // NOI18N - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/LicensePresenter.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/LicensePresenter.java deleted file mode 100644 index ec9cca131e39..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/LicensePresenter.java +++ /dev/null @@ -1,414 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.nio.file.Files; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.UserAbortException; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.remote.FileDownloader; - -/** - * License console "dialog" driver. - * - * @author sdedic - */ -public class LicensePresenter { - private final Feedback feedback; - private final ComponentRegistry localRegistry; - - /** - * Licenses to be processed. - */ - private final Map> licensesToAccept; - - private State state = State.NONE; - - /** - * True, if multiple licenses were present initially. - */ - private boolean multiLicenses; - - /** - * The ID (hash) of the license to be displayed. - */ - private String displayLicenseId; - - enum State { - /** - * List of licenses with choice to display some or accept all. - */ - LIST, - - /** - * Accepts the input. - */ - LISTINPUT, - - /** - * Single license prompt. - */ - SINGLE, - - /** - * Display a license, confirm it. - */ - LICENSE, - - /** - * Abort. - */ - NONE - } - - public LicensePresenter(Feedback feedback, ComponentRegistry localRegistry, Map> licenseIDs) { - this.feedback = feedback.withBundle(LicensePresenter.class); - this.localRegistry = localRegistry; - this.licensesToAccept = licenseIDs; - } - - public Map> getLicensesToAccept() { - return licensesToAccept; - } - - public void filterAcceptedLicenses() { - for (String licId : new ArrayList<>(licensesToAccept.keySet())) { - Collection loaders = licensesToAccept.get(licId); - for (MetadataLoader ldr : new ArrayList<>(loaders)) { - ComponentInfo ci = ldr.getComponentInfo(); - // query the metadata loader (possibly delegates to original software channel - // provider). - Date accepted = ldr.isLicenseAccepted(ci, licId); - if (accepted == null) { - accepted = localRegistry.isLicenseAccepted(ci, licId); - } - if (accepted != null) { - feedback.verboseOutput("INSTALL_LicenseAcceptedAt", ldr.getLicenseType(), accepted, ci.getId(), ci.getName()); - loaders.remove(ldr); - } - } - if (loaders.isEmpty()) { - licensesToAccept.remove(licId); - } - } - multiLicenses = licensesToAccept.size() > 1; - } - - public State getState() { - return state; - } - - public boolean isMultiLicenses() { - return multiLicenses; - } - - public String getDisplayLicenseId() { - return displayLicenseId; - } - - String formatComponentList(String licId) { - List loaders = licensesToAccept.get(licId); - String list = null; - for (MetadataLoader l : loaders) { - ComponentInfo ci = l.getComponentInfo(); - if (list == null) { - list = feedback.l10n("INSTALL_LicenseComponentStart", ci.getName()); - } else { - list = feedback.l10n("INSTALL_LicenseComponentCont", list, ci.getName()); - } - } - return list; - } - - void displayLicenseList() { - feedback.output("INSTALL_LicensesToAccept"); - int idx = 1; - for (String licId : licensesToAccept.keySet()) { - List loaders = licensesToAccept.get(licId); - String list = formatComponentList(licId); - feedback.output("INSTALL_AcceptLicenseComponents", loaders.get(0).getLicenseType(), list, idx); - idx++; - } - feedback.outputPart("INSTALL_AcceptAllLicensesPrompt"); - state = State.LISTINPUT; - } - - private static final Pattern ALL_NUMBERS = Pattern.compile("[0-9]+"); - - boolean isFinished() { - return licensesToAccept.isEmpty(); - } - - void acceptAllLicenses() { - for (String s : new ArrayList<>(licensesToAccept.keySet())) { - acceptLicense(s); - } - licensesToAccept.clear(); - } - - boolean isYes(String userInput) { - if (userInput == Feedback.AUTO_YES) { - return true; - } - Pattern p = Pattern.compile(feedback.l10n("INSTALL_AcceptPromptResponseYes@"), Pattern.CASE_INSENSITIVE); - return p.matcher(userInput).matches(); - } - - boolean isRead(String userInput) { - Pattern p = Pattern.compile(feedback.l10n("INSTALL_AcceptPromptResponseRead@"), Pattern.CASE_INSENSITIVE); - return p.matcher(userInput).matches(); - } - - int processUserInputForList() { - String userInput = feedback.acceptLine(true); - Pattern p = Pattern.compile(feedback.l10n("INSTALL_AcceptPromptResponseAbort@"), Pattern.CASE_INSENSITIVE); - if (p.matcher(userInput).matches()) { - throw new UserAbortException(); - } - if (isYes(userInput)) { - acceptAllLicenses(); - state = State.NONE; - return 0; - } - - if (!ALL_NUMBERS.matcher(userInput).matches()) { - feedback.output("INSTALL_LicenseNumberInvalidEntry", licensesToAccept.size()); - return -1; - } - int n = Integer.parseInt(userInput); - if (n < 0 || n > licensesToAccept.size()) { - feedback.output("INSTALL_LicenseNumberOutOfRange", licensesToAccept.size()); - return -1; - } - return n; - } - - protected void acceptLicense(String licenseId) { - String licText; - try { - licText = loadLicenseText(licenseId); - } catch (IOException ex) { - throw feedback.failure("INSTALL_ErrorHandlingLicenses", ex, ex.getLocalizedMessage()); - } - for (MetadataLoader ldr : licensesToAccept.get(licenseId)) { - Boolean result = null; - try { - // first ask the metadata loader delegate. - result = ldr.recordLicenseAccepted(ldr.getComponentInfo(), licenseId, licText, null); - } catch (IOException ex) { - feedback.error("WARN_LicenseNotRecorded", ex, licenseId, ex.getLocalizedMessage()); - } - if (result == null) { - localRegistry.acceptLicense(ldr.getComponentInfo(), licenseId, licText); - } - } - licensesToAccept.remove(licenseId); - } - - void displaySingleLicense() { - String licId = licensesToAccept.keySet().iterator().next(); - MetadataLoader ldr = licensesToAccept.get(licId).get(0); - String type = ldr.getLicenseType(); - String compList = formatComponentList(licId); - feedback.output("INSTALL_AcceptLicense", compList, type); - feedback.outputPart("INSTALL_AcceptSingleLicense"); - String input = feedback.acceptLine(true); - - if (isYes(input)) { - acceptLicense(licId); - return; - } else if (isRead(input)) { - displayLicenseId = licId; - state = State.LICENSE; - } else { - throw new UserAbortException(); - } - } - - void displayLicenseText() throws IOException { - String text = loadLicenseText(displayLicenseId); - feedback.verbatimOut(text, false); - feedback.output("INSTALL_AcceptLicensePrompt"); - String input = feedback.acceptLine(true); - - if (isYes(input)) { - acceptLicense(displayLicenseId); - state = multiLicenses ? State.LIST : State.SINGLE; - } else if (!multiLicenses) { - throw new UserAbortException(); - } else { - state = State.LIST; - } - } - - boolean isLicenseRemote(String licenseId) { - MetadataLoader ldr = licensesToAccept.get(licenseId).get(0); - String licPath = ldr.getLicensePath(); - return SystemUtils.isRemotePath(licPath); // NOI18N - } - - /** - * Loads license text from the archive. - * - * @param licenseId - * @return text of the license - * @throws IOException - */ - String loadLicenseText(String licenseId) throws IOException { - MetadataLoader ldr = licensesToAccept.get(licenseId).get(0); - if (isLicenseRemote(licenseId)) { - return downloadLicenseText(licenseId, ldr); - } else { - return loadFileLicenseText(ldr); - } - } - - private Map remoteLicenseContents = new HashMap<>(); - - String downloadLicenseText(String id, MetadataLoader ldr) throws IOException { - String c = remoteLicenseContents.get(id); - if (c != null) { - return c; - } - String t = ldr.getLicenseType(); - String label; - - if (!t.equals(ldr.getLicensePath())) { - label = feedback.l10n("INSTALL_DownloadLicenseName", t); - } else { - label = feedback.l10n("INSTALL_DownloadLicenseFile"); - } - c = String.join("\n", Files.readAllLines( - downloadLicenseText(label, ldr.getLicensePath()).toPath())); // NOI18N - remoteLicenseContents.put(id, c); - return c; - } - - File downloadLicenseText(String label, String url) throws IOException { - FileDownloader dn = new FileDownloader( - label, - SystemUtils.toURL(url), - feedback); - - dn.download(); - return dn.getLocalFile(); - } - - String loadFileLicenseText(MetadataLoader ldr) throws IOException { - // may require a download of the archive - try (Archive a = ldr.getArchive()) { - String licensePath = ldr.getLicensePath(); - Archive.FileEntry licenseEntry = null; - - for (Archive.FileEntry e : a) { - String n = e.getName(); - if (n.startsWith("/")) { - n = n.substring(1); - } else if (n.startsWith("./")) { - n = n.substring(2); - } - if (n.equals(licensePath)) { - licenseEntry = e; - break; - } - } - - if (licenseEntry == null) { - throw new IOException(feedback.l10n("INSTALL_LicenseNotFound", licensePath)); - } - - try (InputStream es = a.getInputStream(licenseEntry); - InputStreamReader esr = new InputStreamReader(es, "UTF-8"); - BufferedReader buf = new BufferedReader(esr)) { - return buf.lines().collect(Collectors.joining("\n")); // NOI18N - } - } - } - - void init() { - filterAcceptedLicenses(); - state = multiLicenses ? State.LIST : State.SINGLE; - } - - void run() { - init(); - try { - while (!isFinished()) { - singleStep(); - } - } catch (IOException ex) { - throw feedback.failure("INSTALL_ErrorHandlingLicenses", ex, ex.getLocalizedMessage()); - } - } - - void singleStep() throws IOException { - switch (state) { - case LISTINPUT: - int choice = processUserInputForList(); - switch (choice) { - case -1: - break; - case 0: - state = State.NONE; - break; - default: - List ids = new ArrayList<>(licensesToAccept.keySet()); - displayLicenseId = ids.get(choice - 1); - state = State.LICENSE; - } - break; - case SINGLE: - displaySingleLicense(); - break; - case LICENSE: - displayLicenseText(); - break; - case NONE: - break; - case LIST: - displayLicenseList(); - break; - default: - throw new AssertionError(state.name()); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/ListInstalledCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/ListInstalledCommand.java deleted file mode 100644 index cdc4161fcbef..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/ListInstalledCommand.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.MetadataException; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * Command to lists installed components. - */ -public class ListInstalledCommand extends QueryCommandBase { - private List expressions = Collections.emptyList(); - private Pattern filterPattern; - - public List getExpressions() { - return expressions; - } - - public void setExpressions(List expressions) { - this.expressions = expressions; - } - - @Override - public Map supportedOptions() { - Map m = new HashMap<>(super.supportedOptions()); - m.put(Commands.OPTION_CATALOG, ""); - m.put(Commands.LONG_OPTION_CATALOG, Commands.OPTION_CATALOG); - - m.put(Commands.OPTION_URLS, "X"); // mask out - m.put(Commands.OPTION_FILES, "X"); // mask out - return m; - } - - private void makeRegularExpression() { - StringBuilder sb = new StringBuilder(); - for (String s : expressions) { - if (sb.length() > 0) { - sb.append("|"); - } - sb.append(Pattern.quote(s)).append("$"); - } - if (sb.length() == 0) { - sb.append(".*"); - } - filterPattern = Pattern.compile(sb.toString(), Pattern.CASE_INSENSITIVE); - } - - List findComponentIds() { - Collection comps = catalog.getComponentIDs(); - List ids = new ArrayList<>(comps.size()); - for (String s : comps) { - if (filterPattern.matcher(s).find()) { - ids.add(s); - } - } - Collections.sort(ids); - return ids; - } - - protected String acceptExpression(String expr) { - return expr; - } - - @Override - public int execute() throws IOException { - if (input.optValue(Commands.OPTION_HELP) != null) { - feedback.output("LIST_Help"); - return 0; - } - init(input, feedback); - expressions = new ArrayList<>(); - while (input.hasParameter()) { - String s = input.nextParameter(); - if (s == null || s.isEmpty()) { - continue; - } - String accepted = acceptExpression(s); - if (accepted != null) { - expressions.add(accepted); - } - } - if (process() || isJson()) { - printComponents(); - } - return 0; - } - - protected Version.Match getVersionFilter() { - return input.getLocalRegistry().getGraalVersion().match(Version.Match.Type.INSTALLABLE); - } - - protected List filterDisplayedVersions(@SuppressWarnings("unused") String id, Collection infos) { - List ordered = new ArrayList<>(infos); - Collections.sort(ordered, ComponentInfo.reverseVersionComparator(input.getLocalRegistry().getManagementStorage())); - return ordered; - } - - boolean process() { - makeRegularExpression(); - List ids = findComponentIds(); - List exceptions = new ArrayList<>(); - if (ids.isEmpty()) { - if (!simpleFormat) { - feedback.message("LIST_NoComponentsFound"); - } - return false; - } - Version.Match versionFilter = getVersionFilter(); - for (String id : ids) { - try { - List infos = new ArrayList<>(catalog.loadComponents(id, versionFilter, listFiles)); - if (infos != null) { - for (ComponentInfo ci : filterDisplayedVersions(id, infos)) { - addComponent(null, ci); - } - } - } catch (MetadataException ex) { - exceptions.add(ex); - } - } - if (components.isEmpty()) { - if (!simpleFormat) { - feedback.message("LIST_NoComponentsFound"); - } - return false; - } - if (!simpleFormat && !exceptions.isEmpty()) { - feedback.error("LIST_ErrorInComponentMetadata", null); - for (Exception e : exceptions) { - feedback.error("LIST_ErrorInComponentMetadataItem", e, e.getLocalizedMessage()); - } - } - return true; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PostInstCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PostInstCommand.java deleted file mode 100644 index 0cdec4fe59a4..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PostInstCommand.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.util.Collections; -import java.util.Map; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerCommand; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * - * @author sdedic - */ -public class PostInstCommand implements InstallerCommand { - private CommandInput input; - private Feedback feedback; - - @Override - public Map supportedOptions() { - return Collections.emptyMap(); - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - this.input = commandInput; - this.feedback = feedBack; - } - - @Override - public int execute() throws IOException { - String compId; - PostInstProcess pp = new PostInstProcess(input, feedback); - while ((compId = input.nextParameter()) != null) { - ComponentInfo info = input.getLocalRegistry().loadSingleComponent(compId.toLowerCase(), true); - if (info != null) { - pp.addComponentInfo(info); - } - } - - pp.run(); - return 0; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PostInstProcess.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PostInstProcess.java deleted file mode 100644 index df316caec365..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PostInstProcess.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * - * @author sdedic - */ -final class PostInstProcess { - private final CommandInput input; - private final Feedback feedback; - private final List infos = new ArrayList<>(); - - PostInstProcess(CommandInput cInput, Feedback fb) { - this.input = cInput; - this.feedback = fb; - } - - public void addComponentInfo(ComponentInfo info) { - this.infos.add(info); - } - - private static final Pattern TOKEN_PATTERN = Pattern.compile("\\$\\{([\\p{Alnum}_-]+)\\}"); - - String replaceTokens(ComponentInfo info, String message) { - Map tokens = new HashMap<>(); - Path graalPath = input.getGraalHomePath().normalize(); - - Path archPath = SystemUtils.getRuntimeLibDir(graalPath, true); - - tokens.put(CommonConstants.TOKEN_GRAALVM_PATH, graalPath.toString()); - tokens.put(CommonConstants.TOKEN_GRAALVM_LANG_DIR, SystemUtils.getRuntimeBaseDir(graalPath).resolve("languages").toString()); // NOI18N - tokens.put(CommonConstants.TOKEN_GRAALVM_RTLIB_ARCH_DIR, archPath.toString()); - tokens.put(CommonConstants.TOKEN_GRAALVM_RTLIB_DIR, SystemUtils.getRuntimeLibDir(graalPath, false).toString()); - - tokens.putAll(info.getRequiredGraalValues()); - tokens.putAll(input.getLocalRegistry().getGraalCapabilities()); - - Matcher m = TOKEN_PATTERN.matcher(message); - StringBuilder result = null; - int start = 0; - int last = 0; - while (m.find(start)) { - String token = m.group(1); - String val = tokens.get(token); - if (val != null) { - if (result == null) { - result = new StringBuilder(archPath.toString().length() * 2); - } - result.append(message.substring(last, m.start())); - result.append(val); - last = m.end(); - } - start = m.end(); - } - - if (result == null) { - return message; - } else { - result.append(message.substring(last)); - return result.toString(); - } - } - - void run() { - for (ComponentInfo ci : infos) { - printPostinst(ci); - } - } - - void printPostinst(ComponentInfo i) { - String msg = i.getPostinstMessage(); - if (msg != null) { - String replaced = replaceTokens(i, msg); - // replace potential fileName etc - feedback.verbatimOut(replaced, false); - // add some newlines - feedback.verbatimOut("", false); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PreRemoveCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PreRemoveCommand.java deleted file mode 100644 index 68db9ea4bfad..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PreRemoveCommand.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.util.Collections; -import java.util.Map; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerCommand; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * - * @author sdedic - */ -public class PreRemoveCommand implements InstallerCommand { - private CommandInput input; - private Feedback feedback; - - @Override - public Map supportedOptions() { - return Collections.emptyMap(); - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - this.input = commandInput; - this.feedback = feedBack; - } - - @Override - public int execute() throws IOException { - String compId; - PreRemoveProcess pp = new PreRemoveProcess(input.getGraalHomePath(), input.getFileOperations(), feedback); - while ((compId = input.nextParameter()) != null) { - ComponentInfo info = input.getLocalRegistry().loadSingleComponent(compId.toLowerCase(), true); - if (info != null) { - pp.addComponentInfo(info); - } - } - - pp.run(); - return 0; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PreRemoveProcess.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PreRemoveProcess.java deleted file mode 100644 index 35f135ebd36a..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/PreRemoveProcess.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Copyright (c) 2019, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.io.UncheckedIOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Stream; - -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileOperations; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * - * @author sdedic - */ -public class PreRemoveProcess { - private final Path installPath; - private final Feedback feedback; - private final List infos = new ArrayList<>(); - private final FileOperations fileOps; - - private boolean dryRun; - private boolean ignoreFailedDeletions; - private Set knownPaths; - - public PreRemoveProcess(Path instPath, FileOperations fops, Feedback fb) { - this.feedback = fb.withBundle(PreRemoveProcess.class); - installPath = instPath; - fileOps = fops; - } - - public boolean isDryRun() { - return dryRun; - } - - public PreRemoveProcess setDryRun(boolean dryRun) { - this.dryRun = dryRun; - return this; - } - - public boolean isIgnoreFailedDeletions() { - return ignoreFailedDeletions; - } - - public PreRemoveProcess setIgnoreFailedDeletions(boolean ignoreFailedDeletions) { - this.ignoreFailedDeletions = ignoreFailedDeletions; - return this; - } - - public void addComponentInfo(ComponentInfo info) { - this.infos.add(info); - } - - /** - * Process all the components, prints message. - * - * @throws IOException if deletion fails - */ - public void run() throws IOException { - for (ComponentInfo ci : infos) { - processComponent(ci); - } - } - - /** - * Called also from Uninstaller. Will delete one single file, possibly with altering permissions - * on the parent so the file can be deleted. - * - * @param p file to delete - * @throws IOException - */ - void deleteOneFile(Path p) throws IOException { - try { - fileOps.deleteFile(p); - } catch (IOException ex) { - if (ignoreFailedDeletions) { - if (Files.isDirectory(p)) { - feedback.error("INSTALL_FailedToDeleteDirectory", ex, p, ex.getLocalizedMessage()); - } else { - feedback.error("INSTALL_FailedToDeleteFile", ex, p, ex.getLocalizedMessage()); - } - return; - } - throw ex; - // throw new UncheckedIOException(ex); - } - } - - /** - * Also called from Uninstaller. - * - * @param rootPath root path to delete (inclusive) - * @throws IOException if the deletion fails. - */ - void deleteContentsRecursively(Path rootPath) throws IOException { - if (dryRun) { - return; - } - try (Stream paths = Files.walk(rootPath)) { - paths.sorted(Comparator.reverseOrder()).forEach((p) -> { - try { - if (!p.equals(rootPath) && shouldDeletePath(p)) { - deleteOneFile(p); - } - } catch (IOException ex) { - throw new UncheckedIOException(ex); - } - }); - } catch (UncheckedIOException ex) { - throw ex.getCause(); - } - } - - private boolean shouldDeletePath(Path toDelete) { - Path rel; - try { - rel = installPath.relativize(toDelete); - } catch (IllegalArgumentException ex) { - // cannot relativize; avoid to delete such thing. - return false; - } - String relString = SystemUtils.toCommonPath(rel); - if (Files.isDirectory(toDelete)) { - relString += "/"; // NOI18N - } - return knownPaths == null || !knownPaths.contains(relString); - } - - void processComponent(ComponentInfo ci) throws IOException { - for (String s : ci.getWorkingDirectories()) { - Path p = installPath.resolve(SystemUtils.fromCommonRelative(s)); - feedback.verboseOutput("UNINSTALL_DeletingDirectoryRecursively", p); - this.knownPaths = new HashSet<>(ci.getPaths()); - deleteContentsRecursively(p); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/QueryCommandBase.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/QueryCommandBase.java deleted file mode 100644 index e3a1ed44a1f0..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/QueryCommandBase.java +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.File; -import java.net.URISyntaxException; -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import static org.graalvm.component.installer.Commands.LONG_OPTION_LIST_FILES; -import static org.graalvm.component.installer.Commands.OPTION_LIST_FILES; -import org.graalvm.component.installer.CommonConstants; -import static org.graalvm.component.installer.CommonConstants.CAP_GRAALVM_VERSION; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerCommand; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.shadowed.org.json.JSONArray; -import org.graalvm.shadowed.org.json.JSONObject; - -import static org.graalvm.component.installer.Commands.OPTION_JSON_OUTPUT; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENTS; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_GRAALVM; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_ID; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_NAME; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_ORIGIN; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_STABILITY; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_VERSION; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_FILES; -import static org.graalvm.component.installer.CommonConstants.JSON_KEY_COMPONENT_LIC_IMPL_ACCEPT; - -/** - * List command. - */ -public abstract class QueryCommandBase implements InstallerCommand { - - protected static final Map BASE_OPTIONS = new HashMap<>(); - - static { - BASE_OPTIONS.put(OPTION_LIST_FILES, ""); // NOI18N - BASE_OPTIONS.put(LONG_OPTION_LIST_FILES, OPTION_LIST_FILES); // NOI18N - - BASE_OPTIONS.put(Commands.OPTION_JSON_OUTPUT, ""); - BASE_OPTIONS.put(Commands.LONG_OPTION_JSON_OUTPUT, Commands.OPTION_JSON_OUTPUT); - } - - @Override - public Map supportedOptions() { - return BASE_OPTIONS; - } - - protected CommandInput input; - protected ComponentRegistry registry; - protected ComponentCollection catalog; - protected Feedback feedback; - protected boolean verbose; - protected boolean printTable; - protected boolean listFiles; - private boolean isJson; - protected List componentParams = new ArrayList<>(); - protected List components = new ArrayList<>(); - protected boolean simpleFormat; - - private JSONObject jsonComponent; - - protected JSONObject getJSONComponent() { - return jsonComponent; - } - - public ComponentRegistry getRegistry() { - return registry; - } - - protected boolean isJson() { - return isJson; - } - - public void setRegistry(ComponentRegistry registry) { - this.registry = registry; - } - - public Feedback getFeedback() { - return feedback; - } - - public void setFeedback(Feedback feedback) { - this.feedback = feedback; - } - - public boolean isListFiles() { - return listFiles; - } - - public void setListFiles(boolean listFiles) { - this.listFiles = listFiles; - } - - public boolean isVerbose() { - return verbose; - } - - public void setVerbose(boolean verbose) { - this.verbose = verbose; - } - - protected ComponentCollection initRegistry() { - this.registry = input.getLocalRegistry(); - if (input.optValue(Commands.OPTION_CATALOG) != null || input.optValue(Commands.OPTION_FOREIGN_CATALOG) != null) { - return input.getRegistry(); - } else { - return registry; - } - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - this.input = commandInput; - this.catalog = initRegistry(); - this.feedback = feedBack; - this.isJson = commandInput.optValue(OPTION_JSON_OUTPUT) != null; - this.feedback.setSilent(isJson); - listFiles = commandInput.optValue(OPTION_LIST_FILES) != null; - verbose = commandInput.optValue(Commands.OPTION_VERBOSE) != null; - printTable = !listFiles && !verbose; - processOutputFormat(); - } - - protected void addComponent(ComponentParam param, ComponentInfo info) { - componentParams.add(param); - components.add(info); - } - - public List getComponents() { - return components; - } - - protected void printComponents() { - printHeader(); - JSONArray jsonComponents = null; - if (isJson) { - assert jsonComponent == null; - jsonComponents = new JSONArray(); - } - Iterator itpar = componentParams.iterator(); - for (ComponentInfo info : components) { - if (jsonComponents != null) { - jsonComponents.put(jsonComponent = new JSONObject()); - } - printDetails(itpar.next(), info); - printFileList(info); - printSeparator(info); - } - if (jsonComponents != null) { - final JSONObject json = new JSONObject().put(JSON_KEY_COMPONENTS, jsonComponents); - feedback.suppressSilent(() -> feedback.verbatimOut(verbose ? json.toString(2) : json.toString(), false)); - jsonComponent = null; - } - } - - void printHeader() { - if (simpleFormat) { - feedback.output("LIST_ComponentShortListHeader_Simple@"); - return; - } - if (printTable) { - feedback.output("LIST_ComponentShortListHeader"); - } - } - - String val(String s) { - if (simpleFormat) { - return s == null ? "" : s; - } else { - return s == null ? feedback.l10n("LIST_MetadataUnknown") : s; - } - } - - protected String shortenComponentId(ComponentInfo info) { - return registry.shortenComponentId(info); - } - - @SuppressWarnings("unused") - void printDetails(ComponentParam param, ComponentInfo info) { - String org; - URL u = info.getRemoteURL(); - if (simpleFormat) { - org = u == null ? "" : u.toString(); - } else if (u == null) { - org = ""; // NOI18N - } else if (u.getProtocol().equals("file")) { // NOI18N - try { - org = new File(u.toURI()).getAbsolutePath(); - } catch (URISyntaxException ex) { - // should not happen - org = u.toString(); - } - } else { - org = u.getHost(); - } - boolean implicitlyAccepted = info.isImplicitlyAccepted(); - if (isJson) { - jsonComponent.put(JSON_KEY_COMPONENT_ID, shortenComponentId(info)); - jsonComponent.put(JSON_KEY_COMPONENT_VERSION, info.getVersion().displayString()); - jsonComponent.put(JSON_KEY_COMPONENT_NAME, info.getName()); - jsonComponent.put(JSON_KEY_COMPONENT_GRAALVM, findRequiredGraalVMVersion(info)); - jsonComponent.put(JSON_KEY_COMPONENT_STABILITY, info.getStability().displayName(feedback)); - jsonComponent.put(JSON_KEY_COMPONENT_ORIGIN, u == null ? "" : u); - jsonComponent.put(JSON_KEY_COMPONENT_LIC_IMPL_ACCEPT, implicitlyAccepted); - } else if (printTable) { - String fmt = simpleFormat ? "LIST_ComponentShortList_Simple@" : "LIST_ComponentShortList"; - String line = String.format(feedback.l10n(fmt), - shortenComponentId(info), info.getVersion().displayString(), info.getName(), org, info.getId(), info.getStability().displayName(feedback), - implicitlyAccepted); - feedback.verbatimOut(line, false); - } else { - String fmt = simpleFormat ? "LIST_ComponentBasicInfo_Simple@" : "LIST_ComponentBasicInfo"; - feedback.output(fmt, - shortenComponentId(info), info.getVersion().displayString(), info.getName(), - findRequiredGraalVMVersion(info), u == null ? "" : u, info.getId(), info.getStability().displayName(feedback), implicitlyAccepted); - } - } - - protected String findRequiredGraalVMVersion(ComponentInfo info) { - String s = info.getRequiredGraalValues().get(CAP_GRAALVM_VERSION); - if (s == null) { - return val(s); - } - Version v = Version.fromString(s); - return v.displayString(); - } - - void printFileList(ComponentInfo info) { - if (!listFiles) { - return; - } - List files = new ArrayList<>(info.getPaths()); - Collections.sort(files); - if (isJson) { - jsonComponent.put(JSON_KEY_COMPONENT_FILES, files); - } else { - feedback.output(simpleFormat ? "LIST_ComponentFilesHeader_Simple@" : "LIST_ComponentFilesHeader", files.size()); - for (String s : files) { - feedback.verbatimOut(s, false); - } - if (simpleFormat) { - feedback.output("LIST_ComponentFilesEnd@"); - } - } - } - - void printSeparator(@SuppressWarnings("unused") ComponentInfo info) { - if (simpleFormat || printTable || isJson) { - return; - } - feedback.verbatimOut("", true); // NOI18N - } - - void processOutputFormat() { - if (Boolean.TRUE.toString().equals(System.getProperty(CommonConstants.SYSPROP_SIMPLE_OUTPUT))) { - simpleFormat = true; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/RebuildImageCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/RebuildImageCommand.java deleted file mode 100644 index 5eb823665cd5..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/RebuildImageCommand.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.lang.ProcessBuilder.Redirect; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerCommand; -import static org.graalvm.component.installer.Commands.DO_NOT_PROCESS_OPTIONS; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.SystemUtils; - -public class RebuildImageCommand implements InstallerCommand { - private static final Map OPTIONS = new HashMap<>(); - - private Feedback feedback; - private CommandInput input; - - static { - OPTIONS.put(DO_NOT_PROCESS_OPTIONS, ""); - } - - @Override - public Map supportedOptions() { - return OPTIONS; - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - this.feedback = feedBack; - this.input = commandInput; - } - - final class OutputRewriter implements Runnable { - private final String processName; - private final String substProcessName; - private final InputStream output; - private volatile IOException terminated; - - OutputRewriter(InputStream output, String processName, String substProcessName) { - this.output = output; - this.processName = processName; - this.substProcessName = substProcessName; - } - - @Override - public void run() { - try (BufferedReader bre = new BufferedReader(new InputStreamReader(output))) { - String line; - while ((line = bre.readLine()) != null) { - int i = line.indexOf(processName); - if (i != -1) { - line = line.substring(0, i) + substProcessName + - line.substring(i + processName.length()); - } - feedback.verbatimOut(line, false); - } - } catch (IOException ex) { - terminated = ex; - } - } - } - - @Override - public int execute() throws IOException { - input.getLocalRegistry().verifyAdministratorAccess(); - - ProcessBuilder pb = new ProcessBuilder(); - List commandLine = new ArrayList<>(); - // enforce relative path - Path toolPath = findNativeImagePath(input, feedback); - if (toolPath == null) { - feedback.error("REBUILD_RebuildImagesNotInstalled", null, CommonConstants.NATIVE_IMAGE_ID); - return 2; - } - String procName = toolPath.toAbsolutePath().toString(); - commandLine.add(procName); - if (input.optValue(Commands.OPTION_VERBOSE) != null) { - commandLine.add("--verbose"); // NOI18N - } - while (input.hasParameter()) { - commandLine.add(input.nextParameter()); - } - - pb.command(commandLine); - pb.directory(input.getGraalHomePath().toFile()); - pb.redirectInput(Redirect.INHERIT); - pb.redirectError(Redirect.INHERIT); - - ExecutorService connectors = Executors.newCachedThreadPool(); - try { - int exitCode; - Process p = pb.start(); - OutputRewriter rw = new OutputRewriter(p.getInputStream(), procName, - feedback.l10n("REBUILD_RewriteRebuildToolName")); // NOI18N - Future ioWriter = connectors.submit(rw); - exitCode = p.waitFor(); - ioWriter.get(1000, TimeUnit.MILLISECONDS); - if (rw.terminated != null) { - feedback.error("REBUILD_ImageToolInterrupted", rw.terminated); - } - return exitCode; - } catch (ExecutionException ex) { - feedback.error("REBUILD_ErrorCommunicatingImageTool", ex, ex.getLocalizedMessage()); - return 3; - } catch (TimeoutException | InterruptedException ex) { - feedback.error("REBUILD_ImageToolInterrupted", ex); - return 1; - } - } - - public static Path findNativeImagePath(CommandInput input, Feedback feedback) { - Path baseDir = SystemUtils.getRuntimeBaseDir(input.getGraalHomePath()); - String toolRelativePath = feedback.l10n("REBUILD_ToolRelativePath"); - if (SystemUtils.isWindows()) { - toolRelativePath += ".cmd"; - } - Path p = baseDir.resolve(SystemUtils.fromCommonString(toolRelativePath)); - return (Files.isReadable(p) || Files.isExecutable(p)) ? p : null; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UninstallCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UninstallCommand.java deleted file mode 100644 index a006b4f93240..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UninstallCommand.java +++ /dev/null @@ -1,315 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Stream; - -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerCommand; -import org.graalvm.component.installer.InstallerStopException; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.DistributionType; - -public class UninstallCommand implements InstallerCommand { - - static final Map OPTIONS = new HashMap<>(); - - static { - OPTIONS.put(Commands.OPTION_DRY_RUN, ""); - OPTIONS.put(Commands.OPTION_FORCE, ""); - OPTIONS.put(Commands.OPTION_IGNORE_FAILURES, ""); - OPTIONS.put(Commands.OPTION_UNINSTALL_DEPENDENT, ""); - OPTIONS.put(Commands.OPTION_NO_DEPENDENCIES, ""); - - OPTIONS.put(Commands.LONG_OPTION_DRY_RUN, Commands.OPTION_DRY_RUN); - OPTIONS.put(Commands.LONG_OPTION_FORCE, Commands.OPTION_FORCE); - OPTIONS.put(Commands.LONG_OPTION_IGNORE_FAILURES, Commands.OPTION_IGNORE_FAILURES); - OPTIONS.put(Commands.LONG_OPTION_UNINSTALL_DEPENDENT, Commands.OPTION_UNINSTALL_DEPENDENT); - OPTIONS.put(Commands.LONG_OPTION_NO_DEPENDENCIES, Commands.OPTION_NO_DEPENDENCIES); - } - - private final Map toUninstall = new LinkedHashMap<>(); - private List uninstallSequence = new ArrayList<>(); - private Feedback feedback; - private CommandInput input; - private boolean ignoreFailures; - private ComponentRegistry registry; - private boolean removeDependent; - private boolean breakDependent; - private Map> brokenDependencies = new HashMap<>(); - - @Override - public Map supportedOptions() { - return OPTIONS; - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - this.input = commandInput; - this.feedback = feedBack; - this.registry = input.getLocalRegistry(); - setIgnoreFailures(input.optValue(Commands.OPTION_FORCE) != null); - setBreakDependent(input.optValue(Commands.OPTION_FORCE) != null); - setRemoveDependent(input.optValue(Commands.OPTION_UNINSTALL_DEPENDENT) != null); - } - - public boolean isIgnoreFailures() { - return ignoreFailures; - } - - public void setIgnoreFailures(boolean ignoreFailures) { - this.ignoreFailures = ignoreFailures; - } - - public boolean isRemoveDependent() { - return removeDependent; - } - - public void setRemoveDependent(boolean removeDependent) { - this.removeDependent = removeDependent; - } - - public boolean isBreakDependent() { - return breakDependent; - } - - public void setBreakDependent(boolean breakDependent) { - this.breakDependent = breakDependent; - } - - public Collection getUninstallComponents() { - return new ArrayList<>(toUninstall.values()); - } - - public List getUninstallSequence() { - return Collections.unmodifiableList(uninstallSequence); - } - - public Map> getBrokenDependencies() { - return Collections.unmodifiableMap(brokenDependencies); - } - - void prepareUninstall() { - String compId; - while ((compId = input.nextParameter()) != null) { - if (toUninstall.containsKey(compId)) { - continue; - } - ComponentInfo info = input.getLocalRegistry().loadSingleComponent(compId.toLowerCase(), true); - if (info == null) { - throw feedback.failure("UNINSTALL_UnknownComponentId", null, compId); - } - if (info.getId().equals(BundleConstants.GRAAL_COMPONENT_ID)) { - throw feedback.failure("UNINSTALL_CoreComponent", null, compId); - } - if (info.isNativeComponent()) { - throw feedback.failure("UNINSTALL_NativeComponent", null, info.getId(), info.getName()); - } - if (info.getDistributionType() != DistributionType.OPTIONAL) { - throw feedback.failure("UNINSTALL_BundledComponent", null, info.getId(), info.getName()); - } - toUninstall.put(compId, info); - } - - if (input.hasOption(Commands.OPTION_NO_DEPENDENCIES)) { - return; - } - - for (ComponentInfo u : toUninstall.values()) { - Set br = registry.findDependentComponents(u, true); - if (!br.isEmpty()) { - brokenDependencies.put(u, br); - } - } - } - - void checkBrokenDependencies() { - if (brokenDependencies.isEmpty()) { - return; - } - Set uninstalled = new HashSet<>(toUninstall.values()); - // get all broken components, excluding the ones scheduled for uninstall - Stream stm = brokenDependencies.values().stream().flatMap((col) -> col.stream()).filter((c) -> !uninstalled.contains(c)); - // if all broken are uninstalled -> OK - if (!stm.findFirst().isPresent()) { - return; - } - - List sorted = new ArrayList<>(brokenDependencies.keySet()); - P printer; - boolean warning = removeDependent || breakDependent; - if (warning) { - printer = feedback::output; - feedback.output(removeDependent ? "UNINSTALL_BrokenDependenciesRemove" : "UNINSTALL_BrokenDependenciesWarn"); - } else { - printer = (a, b) -> feedback.error(a, null, b); - feedback.error("UNINSTALL_BrokenDependencies", null); - } - Comparator c = (a, b) -> a.getId().compareToIgnoreCase(b.getId()); - Collections.sort(sorted, c); - for (ComponentInfo i : sorted) { - List deps = new ArrayList<>(brokenDependencies.get(i)); - deps.removeAll(uninstalled); - if (deps.isEmpty()) { - continue; - } - Collections.sort(sorted, c); - - if (!warning) { - printer.print("UNINSTALL_BreakDepSource", i.getName(), i.getId()); - } - for (ComponentInfo d : deps) { - printer.print("UNINSTALL_BreakDepTarget", d.getName(), d.getId()); - } - } - if (warning) { - return; - } - throw feedback.failure("UNINSTALL_BreakDependenciesTerminate", null); - } - - void includeAndOrderComponents() { - Set allBroken = new LinkedHashSet<>(); - if (!(input.hasOption(Commands.OPTION_NO_DEPENDENCIES) || breakDependent)) { - for (Collection ii : brokenDependencies.values()) { - allBroken.addAll(ii); - } - for (ComponentInfo ci : allBroken) { - Set br = registry.findDependentComponents(ci, true); - if (!br.isEmpty()) { - allBroken.addAll(br); - brokenDependencies.put(ci, br); - } - } - - if (removeDependent) { - Set newBroken = new HashSet<>(); - for (ComponentInfo i : allBroken) { - ComponentInfo full = registry.loadSingleComponent(i.getId(), true); - newBroken.add(full); - toUninstall.put(i.getId(), full); - } - allBroken = newBroken; - } - } - - List leaves = new ArrayList<>(toUninstall.values()); - leaves.removeAll(allBroken); - - List ordered = new ArrayList<>(toUninstall.size()); - ordered.addAll(leaves); - - int top = leaves.size(); - for (ComponentInfo ci : allBroken) { - Set check = new HashSet<>(); - CatalogContents.findDependencies(ci, true, Boolean.TRUE, check, (a, b, c, d) -> registry.findComponentMatch(a, b, true)); - int i; - for (i = ordered.size(); i > top; i--) { - ComponentInfo c = ordered.get(i - 1); - if (check.contains(c)) { - break; - } - } - ordered.add(i, ci); - } - Collections.reverse(ordered); - this.uninstallSequence = ordered; - } - - interface P { - void print(String key, Object... params); - } - - @Override - public int execute() throws IOException { - registry.verifyAdministratorAccess(); - if (input.optValue(Commands.OPTION_HELP) != null) { - feedback.output("UNINSTALL_Help"); - return 0; - } - if (!input.hasParameter()) { - feedback.output("UNINSTALL_ParametersMissing"); - return 1; - } - prepareUninstall(); - checkBrokenDependencies(); - includeAndOrderComponents(); - for (ComponentInfo info : uninstallSequence) { - try { - uninstallSingleComponent(info); - } catch (InstallerStopException | IOException ex) { - if (ignoreFailures) { - feedback.error("UNINSTALL_IgnoreFailed", ex, - info.getId(), ex.getLocalizedMessage()); - } else { - feedback.error("UNINSTALL_ErrorDuringProcessing", ex, info.getId()); - throw ex; - } - } - } - return 0; - } - - void uninstallSingleComponent(ComponentInfo info) throws IOException { - Uninstaller inst = new Uninstaller(feedback, input.getFileOperations(), - info, input.getLocalRegistry()); - configureInstaller(inst); - - feedback.output("UNINSTALL_UninstallingComponent", - info.getId(), info.getName(), info.getVersionString()); - doUninstallSingle(inst); - } - - // overriden in tests - void doUninstallSingle(Uninstaller inst) throws IOException { - inst.uninstall(); - } - - private void configureInstaller(Uninstaller inst) { - inst.setInstallPath(input.getGraalHomePath()); - inst.setDryRun(input.optValue(Commands.OPTION_DRY_RUN) != null); - inst.setIgnoreFailedDeletions(input.optValue(Commands.OPTION_IGNORE_FAILURES) != null); - inst.setPreservePaths( - new HashSet<>(registry.getPreservedFiles(inst.getComponentInfo()))); - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Uninstaller.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Uninstaller.java deleted file mode 100644 index 976ae79aa99b..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/Uninstaller.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileOperations; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; - -public class Uninstaller { - private final Feedback feedback; - private final ComponentInfo componentInfo; - private final ComponentRegistry registry; - private final FileOperations fileOps; - - private PreRemoveProcess preRemove; - private Set preservePaths = Collections.emptySet(); - private boolean dryRun; - private boolean ignoreFailedDeletions; - private Path installPath; - - private final Set directoriesToDelete = new HashSet<>(); - - public Uninstaller(Feedback feedback, FileOperations fops, ComponentInfo componentInfo, ComponentRegistry registry) { - this.feedback = feedback; - this.componentInfo = componentInfo; - this.registry = registry; - this.fileOps = fops; - } - - public void uninstall() throws IOException { - uninstallContent(); - if (!isDryRun()) { - registry.removeComponent(componentInfo); - } - } - - void uninstallContent() throws IOException { - preRemove = new PreRemoveProcess(installPath, fileOps, feedback) - .setDryRun(isDryRun()) - .setIgnoreFailedDeletions(isIgnoreFailedDeletions()); - // remove all the files occupied by the component - O: for (String p : componentInfo.getPaths()) { - if (preservePaths.contains(p)) { - feedback.verboseOutput("INSTALL_SkippingSharedFile", p); - continue; - } - // assert relative path - Path toDelete = installPath.resolve(SystemUtils.fromCommonRelative(p)); - if (Files.isDirectory(toDelete)) { - for (String s : preservePaths) { - Path x = SystemUtils.fromCommonRelative(s); - if (x.startsWith(p)) { - // will not delete directory with something shared or system. - continue O; - } - } - directoriesToDelete.add(p); - continue; - } - feedback.verboseOutput("UNINSTALL_DeletingFile", p); - if (!dryRun) { - // ignore missing files, handle permissions - preRemove.deleteOneFile(toDelete); - } - } - List dirNames = new ArrayList<>(directoriesToDelete); - preRemove.processComponent(componentInfo); - Collections.sort(dirNames); - Collections.reverse(dirNames); - for (String s : dirNames) { - Path p = installPath.resolve(SystemUtils.fromCommonRelative(s)); - feedback.verboseOutput("UNINSTALL_DeletingDirectory", p); - if (!dryRun) { - try { - fileOps.deleteFile(p); - } catch (IOException ex) { - if (ignoreFailedDeletions) { - feedback.error("INSTALL_FailedToDeleteDirectory", ex, p, ex.getLocalizedMessage()); - } else { - throw ex; - } - } - } - } - } - - public boolean isIgnoreFailedDeletions() { - return ignoreFailedDeletions; - } - - public void setIgnoreFailedDeletions(boolean ignoreFailedDeletions) { - this.ignoreFailedDeletions = ignoreFailedDeletions; - } - - public boolean isDryRun() { - return dryRun; - } - - public void setDryRun(boolean dryRun) { - this.dryRun = dryRun; - } - - public Path getInstallPath() { - return installPath; - } - - public void setInstallPath(Path installPath) { - this.installPath = installPath; - } - - public Set getPreservePaths() { - return preservePaths; - } - - public void setPreservePaths(Set preservePaths) { - this.preservePaths = preservePaths; - } - - public ComponentInfo getComponentInfo() { - return componentInfo; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UpgradeCommand.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UpgradeCommand.java deleted file mode 100644 index 97aceff02fa2..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UpgradeCommand.java +++ /dev/null @@ -1,181 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.ComponentInstaller; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerCommand; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * - */ -public class UpgradeCommand implements InstallerCommand { - private static final Map options = new HashMap<>(); - - private final boolean allowDistUpgrades; - private CommandInput input; - private Feedback feedback; - private UpgradeProcess helper; - private boolean verifyJars = true; - - static { - options.put(Commands.OPTION_IGNORE_MISSING_COMPONENTS, ""); - options.put(Commands.LONG_OPTION_IGNORE_MISSING_COMPONENTS, Commands.OPTION_IGNORE_MISSING_COMPONENTS); - options.put(Commands.OPTION_NO_VERIFY_JARS, ""); - - options.put(Commands.OPTION_NO_DOWNLOAD_PROGRESS, ""); - options.put(Commands.LONG_OPTION_NO_DOWNLOAD_PROGRESS, Commands.OPTION_NO_DOWNLOAD_PROGRESS); - options.put(Commands.LONG_OPTION_NO_VERIFY_JARS, Commands.OPTION_NO_VERIFY_JARS); - - options.put(Commands.OPTION_USE_EDITION, "s"); - options.put(Commands.LONG_OPTION_USE_EDITION, Commands.OPTION_USE_EDITION); - - options.put(Commands.OPTION_TARGET_DIRECTORY, "s"); - options.put(Commands.LONG_OPTION_TARGET_DIRECTORY, Commands.OPTION_TARGET_DIRECTORY); - - options.put(Commands.OPTION_NO_SYMLINK, ""); - options.put(Commands.LONG_OPTION_NO_SYMLINK, Commands.OPTION_NO_SYMLINK); - - options.putAll(ComponentInstaller.componentOptions); - } - - public UpgradeCommand(boolean allowDistUpgrades) { - this.allowDistUpgrades = allowDistUpgrades; - } - - public UpgradeCommand() { - this(true); - } - - @Override - public Map supportedOptions() { - return allowDistUpgrades ? options : Collections.emptyMap(); - } - - protected boolean allowDistUpgrades() { - return allowDistUpgrades; - } - - UpgradeProcess getProcess() { - return helper; - } - - protected void initUpgradeOptions() { - ComponentCollection coll = input.getRegistry(); - coll.setAllowDistUpdate(allowDistUpgrades()); - if (input.optValue(Commands.OPTION_IGNORE_MISSING_COMPONENTS) != null) { - helper.setAllowMissing(true); - } - if (input.optValue(Commands.OPTION_NO_VERIFY_JARS) != null) { - verifyJars = false; - } - String ed = input.optValue(Commands.OPTION_USE_EDITION); - if (ed != null) { - helper.setEditionUpgrade(ed); - } - } - - @Override - public void init(CommandInput commandInput, Feedback feedBack) { - this.input = commandInput; - this.feedback = feedBack.withBundle(UpgradeCommand.class); - helper = new UpgradeProcess(input, feedBack, commandInput.getRegistry()); - initUpgradeOptions(); - } - - ComponentInfo configureProcess() throws IOException { - input.existingFiles().setVerifyJars(verifyJars); - Version min = input.getLocalRegistry().getGraalVersion(); - - String s = input.peekParameter(); - Version v = min; - Version.Match filter = min.match(allowDistUpgrades() ? Version.Match.Type.MOSTRECENT : Version.Match.Type.COMPATIBLE); - if (s != null) { - try { - Version.Match.Type mt = Version.Match.Type.COMPATIBLE; - if (s.startsWith("=")) { - mt = Version.Match.Type.EXACT; - s = s.substring(1); - } else if (s.startsWith("+")) { - mt = Version.Match.Type.INSTALLABLE; - s = s.substring(1); - } - v = Version.fromUserString(s); - // cannot just compare user vs. graal, must match the user to the list of Graals to - // resolve the - // uncertaint parts (-x and possible suffix) - filter = v.match(mt); - if (min.compareTo(v) > 0) { - throw feedback.failure("UPGRADE_CannotDowngrade", null, v.displayString()); - } - input.nextParameter(); - input.existingFiles().matchVersion(filter); - } catch (IllegalArgumentException ex) { - // not a version, continue with component upgrade - } - } - // allow dist upgrade when searching for components - for (ComponentParam p : input.existingFiles()) { - helper.addComponent(p); - } - ComponentInfo info = helper.findGraalVersion(filter); - return info; - } - - @Override - public int execute() throws IOException { - input.getLocalRegistry().verifyAdministratorAccess(); - - if (input.optValue(Commands.OPTION_HELP) != null) { - feedback.output(allowDistUpgrades ? "UPGRADE_Help" : "UPDATE_Help"); - return 0; - } - try (UpgradeProcess h = this.helper) { - ComponentInfo info = configureProcess(); - boolean workDone; - - if (allowDistUpgrades) { - workDone = h.installGraalCore(info); - } else { - workDone = false; - } - h.installAddedComponents(); - if (h.addedComponents().isEmpty()) { - return workDone ? 0 : 1; - } - } - return 0; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UpgradeProcess.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UpgradeProcess.java deleted file mode 100644 index 2cf13d1f6deb..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/commands/UpgradeProcess.java +++ /dev/null @@ -1,777 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.commands; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.NoSuchElementException; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.ComponentInstaller; -import org.graalvm.component.installer.ComponentIterable; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileOperations; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.UnknownVersionException; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.DistributionType; -import org.graalvm.component.installer.persist.DirectoryStorage; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.remote.CatalogIterable; - -/** - * Drives the GraalVM core upgrade process. - * - * @author sdedic - */ -public class UpgradeProcess implements AutoCloseable { - private final CommandInput input; - private final Feedback feedback; - private final ComponentCollection catalog; - - private final Set existingComponents = new HashSet<>(); - private final Set addComponents = new HashSet<>(); - private final Set migrated = new HashSet<>(); - private final Set explicitIds = new HashSet<>(); - - private ComponentInfo targetInfo; - private Path newInstallPath; - private Path newGraalHomePath; - private MetadataLoader metaLoader; - private boolean allowMissing; - private ComponentRegistry newGraalRegistry; - private Version minVersion = Version.NO_VERSION; - private String editionUpgrade; - private Set acceptedLicenseIDs = new HashSet<>(); - - public UpgradeProcess(CommandInput input, Feedback feedback, ComponentCollection catalog) { - this.input = input; - this.feedback = feedback.withBundle(UpgradeProcess.class); - this.catalog = catalog; - resetExistingComponents(); - } - - final void resetExistingComponents() { - existingComponents.clear(); - existingComponents.addAll(input.getLocalRegistry().getComponentIDs().stream().filter((id) -> { - ComponentInfo info = input.getLocalRegistry().findComponent(id); - // only auto-include the 'leaf' components - return info != null && input.getLocalRegistry().findDependentComponents(info, false).isEmpty(); - }).collect(Collectors.toList())); - existingComponents.remove(BundleConstants.GRAAL_COMPONENT_ID); - } - - public String getEditionUpgrade() { - return editionUpgrade; - } - - public void setEditionUpgrade(String editionUpgrade) { - this.editionUpgrade = editionUpgrade; - } - - /** - * Adds a component to install to the upgraded core. - * - * @param info the component to install. - */ - public void addComponent(ComponentParam info) throws IOException { - addComponents.add(info); - explicitIds.add(info.createMetaLoader().getComponentInfo().getId().toLowerCase(Locale.ENGLISH)); - } - - public Set addedComponents() { - return addComponents; - } - - public boolean isAllowMissing() { - return allowMissing; - } - - public void setAllowMissing(boolean allowMissing) { - this.allowMissing = allowMissing; - } - - Path getNewInstallPath() { - return newInstallPath; - } - - public List allComponents() throws IOException { - Set ids = new HashSet<>(); - ArrayList allComps = new ArrayList<>(addedComponents()); - for (ComponentParam p : allComps) { - ids.add(p.createMetaLoader().getComponentInfo().getId()); - } - for (ComponentInfo mig : migrated) { - if (ids.contains(mig.getId())) { - continue; - } - allComps.add(input.existingFiles().createParam(mig.getId(), mig)); - } - return allComps; - } - - /** - * Access to {@link ComponentRegistry} in the new instance. - * - * @return registry in the new instance. - */ - public ComponentRegistry getNewGraalRegistry() { - return newGraalRegistry; - } - - /** - * Finds parent path for the new GraalVM installation. Note that on MacOs X the "JAVA_HOME" is - * below the installation root, so on MacOS X the installation root is returned. - * - * @return installation root for the core package. - */ - Path findGraalVMParentPath() { - Path vmRoot = input.getGraalHomePath().normalize(); - if (vmRoot.getNameCount() == 0) { - return null; - } - Path skipPath = SystemUtils.getGraalVMJDKRoot(input.getLocalRegistry()); - Path skipped = vmRoot; - while (skipPath != null && skipped != null && skipPath.getNameCount() > 0 && - Objects.equals(skipPath.getFileName(), skipped.getFileName())) { - skipPath = skipPath.getParent(); - skipped = skipped.getParent(); - } - if (skipPath == null || skipPath.getNameCount() == 0) { - vmRoot = skipped; - } - Path parent = vmRoot.getParent(); - // ensure the parent directory is still writable: - if (parent != null && !Files.isWritable(parent)) { - throw feedback.failure("UPGRADE_DirectoryNotWritable", null, parent); - } - return parent; - } - - /** - * Defines name for the install path. The GraalVM core package may define "edition" capability, - * which places "ee" in the name. - * - * @param graal new Graal core component - * @return Path to the installation directory - */ - Path createInstallName(ComponentInfo graal) { - String targetDir = input.optValue(Commands.OPTION_TARGET_DIRECTORY); - Path base; - - if (targetDir != null) { - base = SystemUtils.fromUserString(targetDir); - } else { - base = findGraalVMParentPath(); - } - // "provides" java_version - String jv = graal.getProvidedValue(CommonConstants.CAP_JAVA_VERSION, String.class); - if (jv == null) { - // if not present, then at least "requires" which is autogenerated from release file. - jv = graal.getRequiredGraalValues().get(CommonConstants.CAP_JAVA_VERSION); - } - if (jv == null) { - jv = input.getLocalRegistry().getGraalCapabilities().get(CommonConstants.CAP_JAVA_VERSION); - } - String ed = graal.getProvidedValue(CommonConstants.CAP_EDITION, String.class); - if (ed == null) { - // maybe we do install a specific edition ? - if (editionUpgrade != null) { - ed = editionUpgrade; - } else { - ed = input.getLocalRegistry().getGraalCapabilities().get(CommonConstants.CAP_EDITION); - } - } - String dirName = feedback.l10n( - ed == null ? "UPGRADE_GraalVMDirName@" : "UPGRADE_GraalVMDirNameEdition@", - graal.getVersion().displayString(), - ed, - jv); - return base.resolve(SystemUtils.fileName(dirName)); - } - - /** - * Prepares the installation of the core Component. Returns {@code false} if the upgrade is not - * necessary or not found. - * - * @param info - * @return true, if the graalvm should be updated. - * @throws IOException - */ - boolean prepareInstall(ComponentInfo info) throws IOException { - Version min = input.getLocalRegistry().getGraalVersion(); - if (info == null) { - feedback.message("UPGRADE_NoUpdateFound", min.displayString()); - return false; - } - int cmp = min.compareTo(info.getVersion()); - if ((cmp > 0) || ((editionUpgrade == null) && (cmp == 0))) { - feedback.message("UPGRADE_NoUpdateLatestVersion", min.displayString()); - migrated.clear(); - return false; - } - - Path reported = createInstallName(info); - // there's a slight chance this will be different from the final name ... - feedback.output("UPGRADE_PreparingInstall", info.getVersion().displayString(), reported); - failIfDirectotyExistsNotEmpty(reported); - - ComponentParam coreParam = createGraalComponentParam(info); - // reuse License logic from the installer command: - InstallCommand cmd = new InstallCommand(); - cmd.init(input, feedback); - - // ask the InstallCommand to process/accept the licenses, if there are any. - MetadataLoader ldr = coreParam.createMetaLoader(); - cmd.addLicenseToAccept(ldr); - cmd.acceptLicenses(); - acceptedLicenseIDs = cmd.getProcessedLicenses(); - - // force download - ComponentParam param = input.existingFiles().createParam("core", info); - metaLoader = param.createFileLoader(); - ComponentInfo completeInfo = metaLoader.completeMetadata(); - newInstallPath = createInstallName(completeInfo); - newGraalHomePath = newInstallPath; - failIfDirectotyExistsNotEmpty(newInstallPath); - - if (!reported.equals(newInstallPath)) { - feedback.error("UPGRADE_WarningEditionDifferent", null, info.getVersion().displayString(), newInstallPath); - } - - existingComponents.addAll(input.getLocalRegistry().getComponentIDs()); - existingComponents.remove(BundleConstants.GRAAL_COMPONENT_ID); - return true; - } - - void failIfDirectotyExistsNotEmpty(Path target) throws IOException { - if (!Files.exists(target)) { - return; - } - if (!Files.isDirectory(target)) { - throw feedback.failure("UPGRADE_TargetExistsNotDirectory", null, target); - } - Path ghome = target.resolve(SystemUtils.getGraalVMJDKRoot(input.getLocalRegistry())); - Path relFile = ghome.resolve("release"); - if (Files.isReadable(relFile)) { - Version targetVersion = null; - try { - ComponentRegistry reg = createRegistryFor(ghome); - targetVersion = reg.getGraalVersion(); - } catch (FailedOperationException ex) { - // ignore - } - if (targetVersion != null) { - throw feedback.failure("UPGRADE_TargetExistsContainsGraalVM", null, target, targetVersion.displayString()); - } - } - if (Files.list(target).findFirst().isPresent()) { - throw feedback.failure("UPGRADE_TargetExistsNotEmpty", null, target); - } - } - - /** - * Completes the component info, loads symlinks, permissions. Same as - * {@link InstallCommand#createInstaller}. - */ - GraalVMInstaller createGraalVMInstaller(ComponentInfo info) throws IOException { - ComponentParam p = createGraalComponentParam(info); - MetadataLoader ldr = p.createFileLoader(); - ldr.loadPaths(); - if (p.isComplete()) { - Archive a; - a = ldr.getArchive(); - a.verifyIntegrity(input); - } - ComponentInfo completeInfo = ldr.getComponentInfo(); - targetInfo = completeInfo; - metaLoader = ldr; - GraalVMInstaller gvmInstaller = new GraalVMInstaller(feedback, - input.getFileOperations(), - input.getLocalRegistry(), completeInfo, catalog, - metaLoader.getArchive()); - // do not create symlinks if disabled, or target directory is given. - boolean disableSymlink = input.hasOption(Commands.OPTION_NO_SYMLINK) || - input.hasOption(Commands.OPTION_TARGET_DIRECTORY); - gvmInstaller.setDisableSymlinks(disableSymlink); - // will make registrations for bundled components, too. - gvmInstaller.setAllowFilesInComponentDir(true); - gvmInstaller.setCurrentInstallPath(input.getGraalHomePath()); - gvmInstaller.setInstallPath(newInstallPath); - gvmInstaller.setPermissions(ldr.loadPermissions()); - gvmInstaller.setSymlinks(ldr.loadSymlinks()); - newGraalHomePath = gvmInstaller.getInstalledPath(); - return gvmInstaller; - } - - /** - * Cached parameter for the core. It will cache MetaLoader and FileLoader for subsequent - * operations. - */ - private ComponentParam graalCoreParam; - private GraalVMInstaller coreInstaller; - - ComponentParam createGraalComponentParam(ComponentInfo info) { - if (graalCoreParam == null) { - graalCoreParam = input.existingFiles().createParam(info.getId(), info); - } - return graalCoreParam; - } - - public boolean installGraalCore(ComponentInfo info) throws IOException { - if (!prepareInstall(info)) { - return false; - } - - GraalVMInstaller gvmInstaller = createGraalVMInstaller(info); - - feedback.output("UPGRADE_InstallingCore", info.getVersion().displayString(), newInstallPath.toString()); - - gvmInstaller.install(); - // allow symlink to be created in close(); the symlink won't obscure paths - // that might contain the symlink during installation of components. - coreInstaller = gvmInstaller; - - Path installed = gvmInstaller.getInstalledPath(); - newGraalRegistry = createRegistryFor(installed); - migrateLicenses(); - return true; - } - - private ComponentRegistry createRegistryFor(Path home) { - DirectoryStorage dst = new DirectoryStorage( - feedback.withBundle(ComponentInstaller.class), - home.resolve(SystemUtils.fromCommonRelative(CommonConstants.PATH_COMPONENT_STORAGE)), - home); - dst.setJavaVersion(input.getLocalRegistry().getJavaVersion()); - return new ComponentRegistry(feedback, dst); - } - - /** - * Checks if the candidate GraalVM satisfies all dependencies of added components. Added - * components are those specified on the commandline; - * - * @param candidate candidate GraalVM component - * @return broken components - */ - Collection satisfiedAddedComponents(ComponentInfo candidate) throws IOException { - List broken = new ArrayList<>(); - Version gv = candidate.getVersion(); - Version.Match satisfies = gv.match(Version.Match.Type.COMPATIBLE); - for (ComponentParam param : addComponents) { - ComponentInfo in = param.createMetaLoader().getComponentInfo(); - String vs = in.getRequiredGraalValues().get(BundleConstants.GRAAL_VERSION); - Version cv = Version.fromString(vs); - if (!satisfies.test(cv)) { - broken.add(in); - if (minVersion.compareTo(cv) < 0) { - minVersion = cv; - } - } - } - return broken; - } - - Set findInstallables(ComponentInfo graal) { - Version gv = graal.getVersion(); - Version.Match satisfies = gv.match(Version.Match.Type.COMPATIBLE); - Set ret = new HashSet<>(); - for (String id : existingComponents) { - if (explicitIds.contains(id)) { - continue; - } - Collection cis = catalog.loadComponents(id, satisfies, false); - if (cis == null || cis.isEmpty()) { - continue; - } - List versions = new ArrayList<>(cis); - ret.add(versions.get(versions.size() - 1)); - } - return ret; - } - - public ComponentInfo getTargetInfo() { - return targetInfo; - } - - private String lowerCaseId(String s) { - return s.toLowerCase(Locale.ENGLISH); - } - - public ComponentInfo findGraalVersion(Version.Match minimum) throws IOException { - Version.Match filter; - if (minimum.getType() == Version.Match.Type.MOSTRECENT) { - filter = minimum.getVersion().match(Version.Match.Type.INSTALLABLE); - } else { - filter = minimum; - } - Collection graals; - try { - graals = catalog.loadComponents(BundleConstants.GRAAL_COMPONENT_ID, - filter, false); - if (graals == null || graals.isEmpty()) { - return null; - } - } catch (UnknownVersionException ex) { - // could not find anything to match the user version against - if (ex.getCandidate() == null) { - throw feedback.failure("UPGRADE_NoSpecificVersion", ex, filter.getVersion().displayString()); - } else { - throw feedback.failure("UPGRADE_NoSpecificVersion2", ex, filter.getVersion().displayString(), ex.getCandidate().displayString()); - } - } - List versions = new ArrayList<>(graals); - Collections.sort(versions, ComponentInfo.versionComparator().reversed()); - for (Iterator it = versions.iterator(); it.hasNext();) { - ComponentInfo candidate = it.next(); - Collection broken = satisfiedAddedComponents(candidate); - if (!broken.isEmpty()) { - it.remove(); - } - } - if (versions.isEmpty()) { - throw feedback.failure("UPGRADE_NoVersionSatisfiesComponents", null, minVersion.toString()); - } - - Set installables = null; - Set first = null; - ComponentInfo result = null; - Set toMigrate = existingComponents.stream().filter((id) -> { - ComponentInfo ci = input.getLocalRegistry().loadSingleComponent(id, false); - return ci.getDistributionType() != DistributionType.BUNDLED; - }).map(this::lowerCaseId).collect(Collectors.toSet()); - toMigrate.removeAll(explicitIds); - - Map> missingParts = new HashMap<>(); - for (Iterator it = versions.iterator(); it.hasNext();) { - ComponentInfo candidate = it.next(); - Set instCandidates = findInstallables(candidate); - if (first == null) { - first = instCandidates; - } - Set canMigrate = instCandidates.stream().map(ComponentInfo::getId).map(this::lowerCaseId).collect(Collectors.toSet()); - if (allowMissing || canMigrate.containsAll(toMigrate)) { - installables = instCandidates; - result = candidate; - break; - } else { - Set miss = new HashSet<>(toMigrate); - miss.removeAll(canMigrate); - missingParts.put(candidate, miss.stream().map((id) -> input.getLocalRegistry().findComponent(id)).collect(Collectors.toSet())); - } - } - if (installables == null) { - if (!allowMissing) { - List reportVersions = new ArrayList<>(missingParts.keySet()); - for (ComponentInfo core : reportVersions) { - List list = new ArrayList<>(missingParts.get(core)); - Collections.sort(list, (a, b) -> a.getId().compareToIgnoreCase(b.getId())); - - String msg = null; - for (ComponentInfo ci : list) { - String shortId = input.getLocalRegistry().shortenComponentId(ci); - String s = feedback.l10n("UPGRADE_MissingComponentItem", shortId, ci.getName()); - if (msg == null) { - msg = s; - } else { - msg = feedback.l10n("UPGRADE_MissingComponentListPart", msg, s); - } - } - - feedback.error("UPGRADE_MissingComponents", null, core.getName(), core.getVersion().displayString(), msg); - } - if (editionUpgrade != null) { - throw feedback.failure("UPGRADE_ComponentsMissingFromEdition", null, editionUpgrade); - } else { - throw feedback.failure("UPGRADE_ComponentsCannotMigrate", null); - } - } - if (versions.isEmpty()) { - throw feedback.failure("UPGRADE_NoVersionSatisfiesComponents", null); - } - result = versions.get(0); - installables = first; - } - migrated.clear(); - // if the result GraalVM is identical to current, do not migrate anything. - if (result != null && (!input.getLocalRegistry().getGraalVersion().equals(result.getVersion()) || - input.hasOption(Commands.OPTION_USE_EDITION))) { - migrated.addAll(installables); - targetInfo = result; - } - return result; - } - - public boolean didUpgrade() { - return newGraalRegistry != null; - } - - /* - * public void identifyMigratedCompoents(ComponentInfo target) { if - * (!satisfiedAddedComponents(target)) { throw - * feedback.failure("UPGRADE_NoVersionSatisfiesComponents", null); } this.targetInfo = target; - * this.addComponents.addAll(findInstallables(target)); } - */ - - public void migrateLicenses() { - if (!SystemUtils.isLicenseTrackingEnabled()) { - return; - } - feedback.output("UPGRADE_MigratingLicenses", input.getLocalRegistry().getGraalVersion().displayString(), - targetInfo.getVersion().displayString()); - for (Map.Entry> e : input.getLocalRegistry().getAcceptedLicenses().entrySet()) { - String licId = e.getKey(); - - for (String compId : e.getValue()) { - try { - String t = input.getLocalRegistry().licenseText(licId); - ComponentInfo info = input.getLocalRegistry().findComponent(compId); - Date d = input.getLocalRegistry().isLicenseAccepted(info, licId); - newGraalRegistry.acceptLicense(info, licId, t, d); - } catch (FailedOperationException ex) { - feedback.error("UPGRADE_CannotMigrateLicense", ex, compId, licId); - } - } - } - // dirty way how to migrate GDS settings: - Path gdsSettings = SystemUtils.resolveRelative( - input.getGraalHomePath(), - CommonConstants.PATH_COMPONENT_STORAGE + "/gds"); - if (Files.isDirectory(gdsSettings)) { - Path targetGdsSettings = SystemUtils.resolveRelative( - newInstallPath.resolve(SystemUtils.getGraalVMJDKRoot(newGraalRegistry)), - CommonConstants.PATH_COMPONENT_STORAGE + "/gds"); - try { - SystemUtils.copySubtree(gdsSettings, targetGdsSettings); - } catch (IOException ex) { - feedback.error("UPGRADE_CannotMigrateGDS", ex, ex.getLocalizedMessage()); - } - } - } - - protected InstallCommand configureInstallCommand(InstallCommand instCommand) throws IOException { - List params = new ArrayList<>(); - // add migrated components - params.addAll(allComponents()); - if (params.isEmpty()) { - return null; - } - instCommand.init(new InputDelegate(params), feedback); - instCommand.setAllowUpgrades(true); - instCommand.setForce(true); - instCommand.markLicensesProcessed(acceptedLicenseIDs); - return instCommand; - } - - public void installAddedComponents() throws IOException { - // install all the components - InstallCommand ic = configureInstallCommand(new InstallCommand()); - if (ic != null) { - ic.execute(); - } - } - - @Override - public void close() throws IOException { - if (coreInstaller != null) { - coreInstaller.createSymlink(); - } - for (ComponentParam p : allComponents()) { - p.close(); - } - if (metaLoader != null) { - metaLoader.close(); - } - } - - /** - * The class provides a new local registry in the new installation, and a new component - * registry, for the target graalvm version. - */ - class InputDelegate implements CommandInput { - private final List params; - private int index; - private ComponentCatalog remoteRegistry; - - InputDelegate(List params) { - this.params = params; - } - - @Override - public FileOperations getFileOperations() { - return input.getFileOperations(); - } - - @Override - public CatalogFactory getCatalogFactory() { - return input.getCatalogFactory(); - } - - @Override - public ComponentIterable existingFiles() throws FailedOperationException { - return new ComponentIterable() { - @Override - public void setVerifyJars(boolean verify) { - input.existingFiles().setVerifyJars(verify); - } - - @Override - public ComponentParam createParam(String cmdString, ComponentInfo info) { - return new CatalogIterable.CatalogItemParam( - getRegistry().getDownloadInterceptor(), - info, - info.getName(), - cmdString, - feedback, - input.optValue(Commands.OPTION_NO_DOWNLOAD_PROGRESS) == null); - } - - @Override - public Iterator iterator() { - return new Iterator<>() { - boolean init; - - @Override - public boolean hasNext() { - if (!init) { - init = true; - index = 0; - } - return index < params.size(); - } - - @Override - public ComponentParam next() { - if (index >= params.size()) { - throw new NoSuchElementException(); - } - return params.get(index++); - } - - }; - } - - @Override - public ComponentIterable matchVersion(Version.Match m) { - return this; - } - - @Override - public ComponentIterable allowIncompatible() { - return this; - } - }; - } - - @Override - public String requiredParameter() throws FailedOperationException { - if (index >= params.size()) { - throw feedback.failure("UPGRADE_MissingParameter", null); - } - return nextParameter(); - } - - @Override - public String nextParameter() { - if (!hasParameter()) { - return null; - } - return params.get(index++).getSpecification(); - } - - @Override - public String peekParameter() { - if (!hasParameter()) { - return null; - } - return params.get(index).getSpecification(); - } - - @Override - public boolean hasParameter() { - return params.size() > index; - } - - @Override - public Path getGraalHomePath() { - return didUpgrade() ? newGraalHomePath : input.getGraalHomePath(); - } - - @Override - public ComponentCatalog getRegistry() { - if (remoteRegistry == null) { - remoteRegistry = input.getCatalogFactory().createComponentCatalog(this); - } - return remoteRegistry; - } - - @Override - public ComponentRegistry getLocalRegistry() { - if (newGraalRegistry != null) { - return newGraalRegistry; - } else { - return input.getLocalRegistry(); - } - } - - @Override - public String optValue(String option) { - return input.optValue(option); - } - - @Override - public String getParameter(String key, boolean cmdLine) { - return input.getParameter(key, cmdLine); - } - - @Override - public Map parameters(boolean cmdLine) { - return input.parameters(cmdLine); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/Bundle.properties deleted file mode 100644 index 27bd092d18a0..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/Bundle.properties +++ /dev/null @@ -1,10 +0,0 @@ -OLDS_IncompatibleRelease=Unsupported GraalVM release: OS: {0}, arch: {1}, Java version: {2} - -# {0} - the storage file. -# {1} - the error message. -ERR_CouldNotLoadGDS=Could not load GDS settings from {0}: {1}. - -# {0} - the entered e-mail address. -ERR_EmailNotValid=Invalid email address: {0} -# {1} - the error message. -WARN_CannotSaveEmailAddress=Could not save email address: {0} \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/GdsCommands.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/GdsCommands.java deleted file mode 100644 index afb5bdff43d4..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/GdsCommands.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.gds; - -/** - * - * @author sdedic - */ -public final class GdsCommands { - public static final String OPTION_EMAIL_ADDRESS = "^"; - public static final String LONG_OPTION_EMAIL_ADDRESS = "email"; - public static final String OPTION_GDS_CONFIG = ";"; - public static final String LONG_OPTION_GDS_CONFIG = "config"; - public static final String OPTION_SHOW_TOKEN = "}"; - public static final String LONG_OPTION_SHOW_TOKEN = "show-ee-token"; - - public static final String OPTION_REVOKE_TOKEN = "{"; - public static final String LONG_OPTION_REVOKE_TOKEN = "revoke-token"; - public static final String OPTION_REVOKE_CURRENT_TOKEN = "~"; - public static final String LONG_OPTION_REVOKE_CURRENT_TOKEN = "revoke-current-token"; - public static final String OPTION_REVOKE_ALL_TOKENS = "1"; - public static final String LONG_OPTION_REVOKE_ALL_TOKENS = "revoke-all-tokens"; -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/GraalChannelBase.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/GraalChannelBase.java deleted file mode 100644 index c36699ab0e1f..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/GraalChannelBase.java +++ /dev/null @@ -1,226 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds; - -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.IncompatibleException; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.remote.FileDownloader; -import java.io.IOException; -import java.net.URL; -import java.util.Collections; -import java.util.Map; -import java.util.Set; - -/** - * Abstracted common base for GDSChannel and GraalChannel. - * - * @author odouda - */ -public abstract class GraalChannelBase implements SoftwareChannel, ComponentCatalog.DownloadInterceptor { - protected final ComponentRegistry localRegistry; - protected final CommandInput input; - protected final Feedback fb; - - /** - * URL of the relases resource. Used for relative URL resolution. - */ - private URL indexURL; - - /** - * Delay-init storage. Make lazy, as the storage calls back to the toplevel registry. Prevents - * stack overflow. - */ - private final Delayed delayedStorage = new Delayed(); - - /** - * Cached initialized storage. - */ - protected ComponentStorage storage; - - protected String edition; - - /** - * If true, future versions are accepted as well. - */ - private boolean allowUpdates = false; - - public GraalChannelBase(CommandInput aInput, Feedback aFeedback, ComponentRegistry aRegistry) { - if (aInput == null) { - throw new IllegalArgumentException("CommandInput cannot be null."); - } - this.input = aInput; - if (aFeedback == null) { - throw new IllegalArgumentException("Feedback cannot be null."); - } - this.fb = aFeedback; - if (aRegistry == null) { - throw new IllegalArgumentException("ComponentRegistry cannot be null."); - } - this.localRegistry = aRegistry; - } - - public String getEdition() { - return edition; - } - - public void setEdition(String edition) { - this.edition = edition; - } - - public boolean isAllowUpdates() { - return allowUpdates; - } - - public void setAllowUpdates(boolean allowUpdates) { - this.allowUpdates = allowUpdates; - } - - public URL getIndexURL() { - return indexURL; - } - - public final void setIndexURL(URL releasesIndexURL) { - this.indexURL = releasesIndexURL; - } - - @Override - public ComponentStorage getStorage() throws IOException { - return delayedStorage; - } - - /** - * Delay-init storage. As listing (downloading) the catalogs require access to the toplevel - * registry, the toplevel needs to finish the initialization first. - */ - class Delayed implements ComponentStorage { - private ComponentStorage init() throws IOException { - if (storage == null) { - allowUpdates = input.getRegistry().isAllowDistUpdate(); - storage = loadStorage(); - } - return storage; - } - - @Override - public Set listComponentIDs() throws IOException { - return init().listComponentIDs(); - } - - @Override - public ComponentInfo loadComponentFiles(ComponentInfo ci) throws IOException { - return init().loadComponentFiles(ci); - } - - @Override - public Set loadComponentMetadata(String id) throws IOException { - return init().loadComponentMetadata(id); - } - - @Override - public Map loadGraalVersionInfo() { - return Collections.emptyMap(); - } - } - - static final class NullStorage implements ComponentStorage { - @Override - public Set listComponentIDs() throws IOException { - return Collections.emptySet(); - } - - @Override - public ComponentInfo loadComponentFiles(ComponentInfo ci) throws IOException { - return null; - } - - @Override - public Set loadComponentMetadata(String id) throws IOException { - return Collections.emptySet(); - } - - @Override - public Map loadGraalVersionInfo() { - return Collections.emptyMap(); - } - } - - /** - * On first invocation, throws an exception (will be caught by catalog builder). On subsequent - * invocations, returns a dummy no-component storage. - * - * @return empty storage - */ - protected ComponentStorage throwEmptyStorage() { - if (storage != null) { - return storage; - } - Map caps = localRegistry.getGraalCapabilities(); - String os = caps.get(CommonConstants.CAP_OS_NAME); - String arch = caps.get(CommonConstants.CAP_OS_ARCH); - storage = new NullStorage(); - throw new IncompatibleException(fb.l10n("OLDS_IncompatibleRelease", - SystemUtils.normalizeOSName(os, arch), - SystemUtils.normalizeArchitecture(os, arch), - localRegistry.getJavaVersion())); - } - - /** - * Filters mismatched releases. At this point, accepts only the exactly same release version. - * Could be changed to accept future versions as well, allowing for upgrades. - * - * @param graalVersion current version - * @param vers the version from the release entry - * @return true, if the release matches the current installation - */ - protected boolean acceptsVersion(Version graalVersion, Version vers) { - int c = graalVersion.installVersion().compareTo(vers.installVersion()); - return isAllowUpdates() ? c <= 0 : c == 0; - } - - /** - * Initializes the component storage. Loads the releases index, selects matching releases and - * creates {@link org.graalvm.component.installer.ce.WebCatalog} for each of the catalogs. - * Merges using {@link org.graalvm.component.installer.remote.MergeStorage}. - * - * @return merged storage. - * @throws IOException in case of an I/O error. - */ - protected abstract ComponentStorage loadStorage() throws IOException; - - @Override - public FileDownloader processDownloader(ComponentInfo info, FileDownloader dn) { - return configureDownloader(info, dn); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/MailStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/MailStorage.java deleted file mode 100644 index 8e3d01122d76..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/MailStorage.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - * Copyright (c) 2020, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.gds; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Properties; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentRegistry; -import java.util.regex.Pattern; - -/** - * - * @author sdedic - */ -public class MailStorage { - static final Path PROPERTIES_PATH = SystemUtils.fromCommonRelative(CommonConstants.PATH_COMPONENT_STORAGE + - "/gds/gds.properties"); - static final String PROP_LAST_EMAIL = "last.email"; // NOI18N - - private final ComponentRegistry localRegistry; - private final Feedback feedback; - - private Properties properties; - private Path propertiesPath; - private Path storagePath; - private boolean changed; - - public MailStorage(ComponentRegistry localRegistry, Feedback feedback) { - this.localRegistry = localRegistry; - this.feedback = feedback; - } - - public void setStorage(Path storage) { - this.storagePath = storage; - propertiesPath = storagePath.resolve(PROPERTIES_PATH); - } - - private Properties load() { - localRegistry.getManagementStorage(); - if (properties != null) { - return properties; - } - if (!Files.exists(propertiesPath)) { - properties = new Properties(); - } else { - try (InputStream is = Files.newInputStream(propertiesPath)) { - Properties read = new Properties(); - read.load(is); - this.properties = read; - } catch (IOException ex) { - feedback.error("ERR_CouldNotLoadGDS", ex, propertiesPath, ex.getLocalizedMessage()); - properties = new Properties(); - } - } - return properties; - } - - public String getEmailAddress() { - load(); - return properties.getProperty(PROP_LAST_EMAIL); - } - - public void setEmailAddress(String mailAddress) { - Properties props = load(); - - if (mailAddress == null) { - if (props.containsKey(PROP_LAST_EMAIL)) { - props.remove(PROP_LAST_EMAIL); - changed = true; - } else { - return; - } - } else { - String p = getEmailAddress(); - if (mailAddress.equals(p)) { - return; - } - props.setProperty(PROP_LAST_EMAIL, mailAddress); - } - changed = true; - } - - public void save() throws IOException { - if (!changed || properties == null || propertiesPath == null) { - return; - } - Path parent = propertiesPath.getParent(); - if (parent == null) { - // cannot happen, but Spotbugs keeps yelling - return; - } - Files.createDirectories(propertiesPath.getParent()); - try (OutputStream os = Files.newOutputStream(propertiesPath)) { - properties.store(os, null); - } - } - - /** - * Simple regexp pattern for verifying an e-mail. Definition taken from - * https://www.w3.org/TR/html52/sec-forms.html#valid-e-mail-address; does not support - * internationalized domains well. - */ - private static final Pattern EMAIL_PATTERN = Pattern - .compile("^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$"); - - public static String checkEmailAddress(String mail, Feedback fb) { - String m; - if (mail == null) { - return null; - } else { - m = mail.trim(); - } - if ("".equals(m)) { - return null; - } - if (!EMAIL_PATTERN.matcher(m).matches()) { - throw fb.failure("ERR_EmailNotValid", null, m); - } - return mail; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/ArtifactParser.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/ArtifactParser.java deleted file mode 100644 index 4bf939e8d68e..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/ArtifactParser.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.SystemUtils.OS; -import org.graalvm.component.installer.SystemUtils.ARCH; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.StabilityLevel; -import org.graalvm.component.installer.persist.HeaderParser; -import org.graalvm.shadowed.org.json.JSONArray; -import org.graalvm.shadowed.org.json.JSONObject; - -import java.util.Collection; -import java.util.Collections; -import java.util.Map; -import java.util.Set; -import java.util.function.Supplier; - -/** - * - * @author odouda - */ -class ArtifactParser { - private static final String JSON_META = "metadata"; - private static final String JSON_META_KEY = "key"; - private static final String JSON_META_VAL = "value"; - private static final String JSON_ID = "id"; - private static final String JSON_NAME = "displayName"; - private static final String JSON_LICENSE = "licenseId"; - private static final String JSON_LICENSE_LABEL = "licenseName"; - private static final String JSON_LICENSE_IMPLICITLY_ACCEPTED = "isLicenseImplicitlyAccepted"; - private static final String JSON_HASH = "checksum"; - - private static final String META_VERSION = "version"; - private static final String META_EDITION = "edition"; - private static final String META_JAVA = "java"; - private static final String META_ARCH = "arch"; - private static final String META_OS = "os"; - private static final String META_STABILITY_LEVEL = "stabilityLevel"; - private static final String META_STABILITY = "stability"; - private static final String META_SYMBOLIC_NAME = "symbolicName"; - private static final String META_DEPENDENCY = "requireBundle"; - private static final String META_REQUIRED = "requiredCapabilities"; - private static final String META_PROVIDED = "providedCapabilities"; - private static final String META_WORK_DIR = "workingDirectories"; - - private final JSONObject json; - - ArtifactParser(JSONObject json) { - if (json == null) { - throw new IllegalArgumentException("Parsed Artifact JSON cannot be null."); - } - this.json = json; - checkContent(); - } - - private void checkContent() { - getId(); - getChecksum(); - getMetadata(); - abreviatedDisplayName(); - getLicenseId(); - getLicenseName(); - } - - public String getVersion() { - return getMetadata(META_VERSION); - } - - public String getJava() { - String java = getMetadata(META_JAVA, () -> Integer.toString(SystemUtils.getJavaMajorVersion())); - if (java.startsWith("jdk")) { - java = java.substring(3); - } - return java; - } - - public String getArch() { - return getMetadata(META_ARCH, () -> ARCH.get().getName()); - } - - public String getOs() { - return getMetadata(META_OS, () -> OS.get().getName()); - } - - public String getEdition() { - return getMetadata(META_EDITION); - } - - private JSONArray getMetadata() { - return json.getJSONArray(JSON_META); - } - - private String getId() { - return json.getString(JSON_ID); - } - - public String getLabel() { - return getMetadata(META_SYMBOLIC_NAME); - } - - private String getDisplayName() { - return json.getString(JSON_NAME); - } - - private String getLicenseId() { - return json.getString(JSON_LICENSE); - } - - private String getChecksum() { - return json.getString(JSON_HASH); - } - - private String getLicenseName() { - return json.getString(JSON_LICENSE_LABEL); - } - - private boolean getIsImplicitlyAccepted() { - boolean out = false; - if (json.has(JSON_LICENSE_IMPLICITLY_ACCEPTED)) { - out = json.getBoolean(JSON_LICENSE_IMPLICITLY_ACCEPTED); - } - return out; - } - - private String getStability() { - return getMetadata(META_STABILITY_LEVEL, () -> getMetadata(META_STABILITY)); - } - - private String getRequiredDependency() { - return getMetadata(META_DEPENDENCY); - } - - private String getRequiredCapabilities() { - return getMetadata(META_REQUIRED); - } - - private String getProvidedCapabilities() { - return getMetadata(META_PROVIDED); - } - - private String getWorkingDir() { - return getMetadata(META_WORK_DIR); - } - - public ComponentInfo asComponentInfo(GDSRESTConnector connector, Feedback fb) { - return fillInComponent( - new ComponentInfo( - getLabel(), - abreviatedDisplayName(), - getVersion(), - getChecksum()), - connector, - fb); - } - - private ComponentInfo fillInComponent(ComponentInfo info, GDSRESTConnector connector, Feedback fb) { - info.addRequiredValues(translateRequiredValues(fb)); - info.addProvidedValues(translateProvidedValues(fb)); - info.setDependencies(translateDependency(fb)); - info.setStability(translateStability()); - info.addWorkingDirectories(translateWorkingDirs()); - info.setLicenseType(getLicenseName()); - info.setLicensePath(connector.makeLicenseURL(getLicenseId())); - info.setOrigin(connector.makeArtifactsURL(getJava())); - info.setRemoteURL(connector.makeArtifactDownloadURL(getId())); - info.setShaDigest(SystemUtils.toHashBytes(getChecksum())); - info.setImplicitlyAccepted(getIsImplicitlyAccepted()); - return info; - } - - private Map translateRequiredValues(Feedback fb) { - String req = getRequiredCapabilities(); - if (req == null) { - return Collections.emptyMap(); - } - return new HeaderParser("GDS Required capabilities.", req, fb).parseRequiredCapabilities(); - } - - private String abreviatedDisplayName() { - String dispName = getDisplayName(); - String osName = getOs(); - if (OS.fromName(osName) == OS.MAC) { - osName = dispName.contains(CommonConstants.OS_TOKEN_MAC) - ? CommonConstants.OS_TOKEN_MAC - : CommonConstants.OS_MACOS_DARWIN; - } - return dispName.substring(0, dispName.indexOf(osName)).trim(); - } - - private Map translateProvidedValues(Feedback fb) { - String prov = getProvidedCapabilities(); - if (prov == null || prov.isBlank()) { - return Collections.emptyMap(); - } - return new HeaderParser("GDS Provided capabilities.", prov, fb).parseProvidedCapabilities(); - } - - private Collection translateWorkingDirs() { - String dir = getWorkingDir(); - if (dir == null || dir.isBlank()) { - return Collections.emptyList(); - } - return Collections.singleton(dir); - } - - private StabilityLevel translateStability() { - return StabilityLevel.fromName(getStability()); - } - - private Set translateDependency(Feedback fb) { - String dep = getRequiredDependency(); - if (dep == null || dep.isBlank()) { - return Collections.emptySet(); - } - return new HeaderParser("GDS Dependencies.", dep, fb).parseDependencies(); - } - - private String getMetadata(String key) { - return getMetadata(key, () -> null); - } - - private String getMetadata(String key, Supplier defValue) { - for (Object o : getMetadata()) { - JSONObject mo = (JSONObject) o; - if (key.equals(mo.getString(JSON_META_KEY))) { - return mo.getString(JSON_META_VAL); - } - } - return defValue.get(); - } - - @Override - public String toString() { - return json.toString(); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/Bundle.properties deleted file mode 100644 index 4314404e4ddd..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/Bundle.properties +++ /dev/null @@ -1,66 +0,0 @@ -OLDS_InvalidReleasesFile=Invalid releases file. -OLDS_ReleaseFile=Artifacts catalog -OLDS_IncompatibleRelease=Unsupported GraalVM release: OS: {0}, arch: {1}, java version: {2} -OLDS_ErrorReadingRelease=Error reading release {0}: {1} - -# {0} - malformed url string -ERR_MalformedArtifactUrl=Malformed artifact download URL: {0} - -# {0} - the storage file -# {1} - the error message -<<<<<<< HEAD -ERR_CouldNotLoadToken=Could not retrieve a download token from {0}: {1}. -ERR_CouldNotRemoveToken=Could not remove a download token from your configuration. -======= -ERR_CouldNotLoadToken=Could not retrieve download token from {0}: {1}. -ERR_CouldNotRemoveToken=Could not remove download token from your configuration. ->>>>>>> d72d4507f72 ([GR-43446] Revoke GDS token feature.) -# {0} - the URL -# {1} - the error message -ERR_CouldNotLoadGDS=Could not retrieve information from {0}: {1}. -ERR_EmailAddressMissing=An email address is required to download from the Oracle Graal download service. -# {0} - user's email address -ERR_VerificationEmail=Failed to send verification email to {0}. -# {0} - response body -ERR_ResponseBody=Failed to parse response body. Response: {0} -# {0} - user's download token -ERR_InvalidToken=The download token "{0}" has not been validated. Please check your email and then press ENTER to continue. -# {0} - user's download token -ERR_WrongToken=The download token "{0}" is not valid. - -MSG_EmailAddressEntry=Please provide an email address. \ - Please review Oracle's Privacy Policy (https://www.oracle.com/legal/privacy/privacy-policy.html). -PROMPT_EmailAddressEntry=Enter a valid email address: -# {0} - user's email address -PROMPT_VerifyEmailAddressEntry=The license has been sent to {0}. Accept it and then press ENTER to continue. -MSG_YourEmail=your email -MSG_InputTokenEntry=Enter your download token and press ENTER, or press ENTER to generate a new download token. -PROMPT_InputTokenEntry=Enter a valid download token: -# {0} - download token -MSG_ObtainedToken=Obtained download token "{0}". -# {0} - the entered email address. -ERR_EmailNotValid=Invalid email address: {0} -# {0} - GDS config savefile -WARN_CannotSaveToken=Could not save download token to file: {0} -# {0} - download token -# {1} - download token source -MSG_PrintToken={0}\ntaken from {1}. -# {0} - file path -MSG_PrintTokenFile=default configuration file "{0}" -# {0} - file path -MSG_PrintTokenCmdFile=user-defined configuration file "{0}" -# {0} - env property name -MSG_PrintTokenEnv=Environment property "{0}" -MSG_EmptyToken=There is no saved download token. - -MSG_AcceptRevoke=Please check your email for a message asking you to confirm that you want to revoke your download token(s). -MSG_NoGDSAddress=There is no GDS address to connect to in your GraalVM installation. -MSG_NoRevokableToken=There is no GDS download token to revoke in your configuration. -MSG_NoEmail=Email cannot be empty. - -GDS_REST_ExtraOptionsHelp=\ - \t--config path to configuration file\n\ - \t--show-ee-token print current download token\n\ - \t--revoke-current-token revoke current download token\n\ - \t--revoke-token revoke specified download token\n\ - \t--revoke-all-tokens revoke all download tokens for email diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSCatalogStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSCatalogStorage.java deleted file mode 100644 index e75d409ac214..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSCatalogStorage.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.persist.AbstractCatalogStorage; -import java.io.IOException; -import java.net.URL; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; - -/** - * - * @author odouda - */ -class GDSCatalogStorage extends AbstractCatalogStorage { - private final Map> components; - - GDSCatalogStorage(ComponentRegistry localRegistry, Feedback feedback, URL baseURL, Collection artifacts) { - super(localRegistry, feedback, baseURL); - components = buildComponentsMap(artifacts); - } - - @Override - public Set listComponentIDs() throws IOException { - return components.keySet(); - } - - @Override - public Set loadComponentMetadata(String id) throws IOException { - return components.get(id); - } - - private static Map> buildComponentsMap(Collection artifacts) { - Map> comps = new HashMap<>(); - for (ComponentInfo info : artifacts) { - comps.computeIfAbsent(info.getId(), i -> new HashSet<>()).add(info); - } - return comps; - } - - Map> getComponents() { - return components; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSChannel.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSChannel.java deleted file mode 100644 index fd32fbedf831..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSChannel.java +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.CommonConstants; -import static org.graalvm.component.installer.CommonConstants.RELEASE_GDS_PRODUCT_ID_KEY; -import org.graalvm.component.installer.ComponentInstaller; -import java.io.IOException; -import java.io.InputStreamReader; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.IncompatibleException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.gds.GdsCommands; -import org.graalvm.component.installer.gds.GraalChannelBase; -import org.graalvm.component.installer.gds.MailStorage; -import static org.graalvm.component.installer.gds.rest.GDSRESTConnector.HEADER_VAL_GZIP; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.persist.MetadataLoader; -import org.graalvm.component.installer.persist.MetadataLoaderAdapter; -import org.graalvm.component.installer.remote.FileDownloader; -import org.graalvm.component.installer.remote.ProxyConnectionFactory.HttpConnectionException; -import org.graalvm.shadowed.org.json.JSONArray; -import org.graalvm.shadowed.org.json.JSONException; -import org.graalvm.shadowed.org.json.JSONObject; -import org.graalvm.shadowed.org.json.JSONTokener; - -import java.net.HttpURLConnection; -import java.util.zip.GZIPInputStream; - -/** - * Accesses GDS REST API, the catalogs referenced from it and turns them into a ComponentStorage. - * Currently just ONE single version of GraalVM is supported (see filter in {@link #acceptsVersion}. - * if more versions are selected, all their components are merged, as it is the case of - * multi-versioned catalogs (which are not actively deployed at the moment). - *

- * - * @author odouda - */ -public class GDSChannel extends GraalChannelBase { - private static final Logger LOG = Logger.getLogger(GDSChannel.class.getName()); - - private static final String HEADER_DOWNLOAD_CONFIG = "x-download-token"; - private static final String HEADER_CONTENT_ENCODING = "Content-Encoding"; - private static final String JSON_ITEMS = "items"; - private static final String JSON_EXC_CODE = "code"; - private static final String EXC_URL_END = "/content"; - private static final String EXC_CODE_UNVERIFIED_CONFIG = "UnverifiedToken"; - private static final String EXC_CODE_INVALID_CONFIG = "InvalidToken"; - private static final String EXC_CODE_UNACCEPTED = "InvalidLicenseAcceptance"; - - /** - * Helper to read/store GDS token settings. - */ - private GDSTokenStorage tokenStorage; - - private GDSRESTConnector gdsConnector; - - public GDSChannel(CommandInput aInput, Feedback aFeedback, ComponentRegistry aRegistry) { - super(aInput, aFeedback.withBundle(GDSChannel.class), aRegistry); - } - - void setTokenStorage(GDSTokenStorage s) { - this.tokenStorage = s; - } - - private String getToken() { - if (tokenStorage == null) { - tokenStorage = new GDSTokenStorage(fb, input); - } - return tokenStorage.getToken(); - } - - protected boolean needToken(ComponentInfo info) { - return !info.isImplicitlyAccepted(); - } - - /** - * GDS will require the user to supply an e-mail that can be used collected by the GDS services. - * - * @param info original info - * @param dn downloader instance - * @return configured downloader - */ - @Override - public FileDownloader configureDownloader(ComponentInfo info, FileDownloader dn) { - if (needToken(info)) { - String token = getToken(); - if (!SystemUtils.nonBlankString(token)) { - token = getToken(info.getLicensePath()); - } - dn.addRequestHeader(HEADER_DOWNLOAD_CONFIG, token); - } - getConnector().fillBasics(dn); - dn.setDownloadExceptionInterceptor(this::interceptDownloadException); - return dn; - } - - public IOException interceptDownloadException(IOException downloadException, FileDownloader fileDownloader) { - if (!(downloadException instanceof HttpConnectionException)) { - return downloadException; - } - HttpConnectionException hex = (HttpConnectionException) downloadException; - if (hex.getRetCode() < HttpURLConnection.HTTP_BAD_REQUEST) { - return (IOException) hex.getCause(); - } - String downloadURL = hex.getConnectionUrl().toString(); - if (!downloadURL.endsWith(EXC_URL_END)) { - return (IOException) hex.getCause(); - } - String licensePath = findLicensePath(downloadURL); - if (!SystemUtils.nonBlankString(licensePath)) { - return (IOException) hex.getCause(); - } - String code; - try { - code = new JSONObject(hex.getResponse()).getString(JSON_EXC_CODE); - } catch (JSONException ex) { - return (IOException) hex.getCause(); - } - String token = getToken(); - switch (code) { - case EXC_CODE_INVALID_CONFIG: - fb.output("ERR_WrongToken", token); - if (tokenStorage.getConfSource().equals(GDSTokenStorage.Source.FIL)) { - setToken(""); - } - token = getToken(licensePath); - break; - case EXC_CODE_UNVERIFIED_CONFIG: - fb.output("ERR_InvalidToken", token); - fb.acceptLine(false); - break; - case EXC_CODE_UNACCEPTED: - if (fileDownloader.getAttemptNr() == 1) { - getConnector().sendVerificationEmail(null, licensePath, token); - } - fb.output("PROMPT_VerifyEmailAddressEntry", fb.l10n("MSG_YourEmail")); - fb.acceptLine(false); - break; - default: - return (IOException) hex.getCause(); - } - fileDownloader.addRequestHeader(HEADER_DOWNLOAD_CONFIG, token); - return null; - } - - private String findLicensePath(String artifactURL) { - try { - for (String id : storage.listComponentIDs()) { - for (ComponentInfo info : storage.loadComponentMetadata(id)) { - if (info.getRemoteURL().toString().equals(artifactURL)) { - return info.getLicensePath(); - } - } - } - } catch (IOException ex) { - throw fb.withBundle(ComponentInstaller.class) - .failure("REGISTRY_ReadingComponentList", ex, ex.getLocalizedMessage()); - } - return null; - } - - private String getToken(String licensePath) { - fb.output("MSG_InputTokenEntry"); - fb.outputPart("PROMPT_InputTokenEntry"); - String token = fb.acceptLine(false); - if (!SystemUtils.nonBlankString(token)) { - String email = MailStorage.checkEmailAddress(receiveEmailAddress(), fb); - token = getConnector().sendVerificationEmail(email, licensePath, null); - saveToken(token); - fb.output("PROMPT_VerifyEmailAddressEntry", email); - fb.acceptLine(false); - } else { - saveToken(token); - } - return token; - } - - private void saveToken(String token) { - fb.output("MSG_ObtainedToken", token); - setToken(token); - } - - private void setToken(String token) { - try { - tokenStorage.setToken(token); - tokenStorage.save(); - } catch (IOException ex) { - fb.error("WARN_CannotSaveToken", ex, tokenStorage.getPropertiesPath()); - } - } - - @Override - public MetadataLoader interceptMetadataLoader(ComponentInfo info, MetadataLoader delegate) { - return new MetadataLoaderAdapter(delegate) { - @Override - public String getLicenseType() { - return null; - } - - @Override - public String getLicenseID() { - return null; - } - }; - } - - String receiveEmailAddress() { - String mail = input.optValue(GdsCommands.OPTION_EMAIL_ADDRESS); - if (mail == null) { - fb.output("MSG_EmailAddressEntry"); - fb.outputPart("PROMPT_EmailAddressEntry"); - mail = fb.acceptLine(false); - } - if (mail == null) { - throw fb.failure("ERR_EmailAddressMissing", null); - } - return mail; - } - - /** - * Initializes the component storage. - * - * @return merged storage. - * @throws IOException in case of an I/O error. - */ - @Override - protected ComponentStorage loadStorage() throws IOException { - FileDownloader fd = getConnector().obtainArtifacts(localRegistry.getJavaVersion()); - Path storagePath = fd.getLocalFile().toPath(); - List artifacts = loadArtifacts(storagePath, fd.getResponseHeader().get(HEADER_CONTENT_ENCODING)); - if (artifacts.isEmpty()) { - return throwEmptyStorage(); - } - return new GDSCatalogStorage(localRegistry, fb, storagePath.toUri().toURL(), artifacts); - } - - /** - * Loads the release index. Must be loaded from a local file. - * - * @param releasesIndexPath path to the downloaded releases index. - * @return list of entries in the index - * @throws IOException in case of I/O error. - */ - List loadArtifacts(Path releasesIndexPath, List contentEncoding) throws IOException { - if (edition == null) { - edition = localRegistry.getGraalCapabilities().get(CommonConstants.CAP_EDITION); - } - List result = new ArrayList<>(); - try (InputStreamReader urlReader = new InputStreamReader( - contentEncoding != null && contentEncoding.contains(HEADER_VAL_GZIP) - ? new GZIPInputStream(Files.newInputStream(releasesIndexPath)) - : Files.newInputStream(releasesIndexPath))) { - JSONTokener tokener = new JSONTokener(urlReader); - JSONObject obj = new JSONObject(tokener); - - JSONArray releases = obj.getJSONArray(JSON_ITEMS); - if (releases == null) { - // malformed releases file; - throw new IncompatibleException(fb.l10n("OLDS_InvalidReleasesFile")); - } - - Version v = localRegistry.getGraalVersion(); - for (Object k : releases) { - JSONObject jo = (JSONObject) k; - ArtifactParser e; - try { - e = new ArtifactParser(jo); - } catch (JSONException | IllegalArgumentException ex) { - fb.error("OLDS_ErrorReadingRelease", ex, k, ex.getLocalizedMessage()); - continue; - } - if (!localRegistry.getGraalCapabilities().get(CommonConstants.CAP_OS_NAME).equals(e.getOs())) { - LOG.log(Level.FINER, "Incorrect OS: {0}", k); - } else if (!localRegistry.getGraalCapabilities().get(CommonConstants.CAP_OS_ARCH).equals(e.getArch())) { - LOG.log(Level.FINER, "Incorrect Arch: {0}", k); - } else if (!localRegistry.getJavaVersion().equals(e.getJava())) { - LOG.log(Level.FINER, "Incorrect Java: {0}", k); - } else if (edition != null && !edition.equals(e.getEdition())) { - LOG.log(Level.FINER, "Incorrect edition: {0}", k); - } else if (!acceptsVersion(v, Version.fromString(e.getVersion()))) { - LOG.log(Level.FINER, "Old version: {0} != {1}", new Object[]{v, Version.fromString(e.getVersion()), e.getVersion()}); - } else if (e.getLabel() == null) { - LOG.log(Level.FINER, "Isn't installable component: {0}", new Object[]{e}); - } else { - result.add(e.asComponentInfo(getConnector(), fb)); - } - } - } - return result; - } - - GDSRESTConnector getConnector() { - if (gdsConnector == null) { - gdsConnector = new GDSRESTConnector( - getIndexURL().toString(), - fb, - input.getLocalRegistry().getGraalCapabilities() - .get(RELEASE_GDS_PRODUCT_ID_KEY), - input.getLocalRegistry().getGraalVersion()); - } - return gdsConnector; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSChannelFactory.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSChannelFactory.java deleted file mode 100644 index 4d9d6116c4bc..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSChannelFactory.java +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; - -import java.net.MalformedURLException; -import java.util.HashMap; -import java.util.Map; - -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.gds.GdsCommands; -import java.net.URL; - -/** - * Creates a Software channel for GDS REST API. The URL is: - *

    - *
  • rest://path - *
  • rest:protocol://path - *
- * - * @author odouda - */ -public class GDSChannelFactory implements SoftwareChannel.Factory { - private static final String PROTOCOL_GDS_REST_PREFIX = "rest:"; // NOI18N - private static final String PROTOCOL_HTTTPS_PREFIX = "https:"; // NOI18N - - private static final Map OPTIONS = new HashMap<>(); - - private Feedback feedback; - - static { - OPTIONS.put(GdsCommands.OPTION_GDS_CONFIG, "s"); - OPTIONS.put(GdsCommands.LONG_OPTION_GDS_CONFIG, GdsCommands.OPTION_GDS_CONFIG); - OPTIONS.put(GdsCommands.OPTION_SHOW_TOKEN, ""); - OPTIONS.put(GdsCommands.LONG_OPTION_SHOW_TOKEN, GdsCommands.OPTION_SHOW_TOKEN); - OPTIONS.put(GdsCommands.OPTION_REVOKE_TOKEN, "s"); - OPTIONS.put(GdsCommands.LONG_OPTION_REVOKE_TOKEN, GdsCommands.OPTION_REVOKE_TOKEN); - OPTIONS.put(GdsCommands.OPTION_REVOKE_ALL_TOKENS, "s"); - OPTIONS.put(GdsCommands.LONG_OPTION_REVOKE_ALL_TOKENS, GdsCommands.OPTION_REVOKE_ALL_TOKENS); - OPTIONS.put(GdsCommands.OPTION_REVOKE_CURRENT_TOKEN, ""); - OPTIONS.put(GdsCommands.LONG_OPTION_REVOKE_CURRENT_TOKEN, GdsCommands.OPTION_REVOKE_CURRENT_TOKEN); - } - - @Override - public SoftwareChannel createChannel(SoftwareChannelSource source, CommandInput input, Feedback output) { - feedback = output; - String urlString = source.getLocationURL(); - if (!urlString.startsWith(PROTOCOL_GDS_REST_PREFIX)) { - return null; - } - String rest = urlString.substring(PROTOCOL_GDS_REST_PREFIX.length()); - URL u; - try { - if (rest.startsWith("http") || rest.startsWith("file:") || rest.startsWith("test:")) { - u = SystemUtils.toURL(rest); - } else { - u = SystemUtils.toURL(PROTOCOL_HTTTPS_PREFIX + rest); - } - } catch (MalformedURLException ex) { - throw output.failure("YUM_InvalidLocation", ex, urlString, ex.getLocalizedMessage()); - } - GDSChannel ch = new GDSChannel(input, output, input.getLocalRegistry()); - ch.setIndexURL(u); - ch.setEdition(source.getParameter("edition")); - return ch; - } - - @Override - public Map globalOptions() { - return OPTIONS; - } - - @Override - public String globalOptionsHelp() { - return feedback.l10n("GDS_REST_ExtraOptionsHelp"); - } - - @Override - public void init(CommandInput input, Feedback output) { - feedback = output.withBundle(this.getClass()); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSRESTConnector.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSRESTConnector.java deleted file mode 100644 index 6417c56c396f..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSRESTConnector.java +++ /dev/null @@ -1,398 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.remote.FileDownloader; -import org.graalvm.component.installer.URLConnectionFactory; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.remote.ProxyConnectionFactory; -import org.graalvm.shadowed.org.json.JSONException; -import org.graalvm.shadowed.org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -/** - * This class serves as GDS REST Endpoint connector for communication with service. - * - * @author odouda - */ -class GDSRESTConnector { - static final String ENDPOINT_ARTIFACTS = "artifacts/"; - static final String ENDPOINT_DOWNLOAD = "/content"; - static final String ENDPOINT_PRODUCTS = "products"; - static final String ENDPOINT_LICENSE = "licenses/"; - static final String ENDPOINT_LICENSE_ACCEPT = "licenseAcceptance/"; - static final String ENDPOINT_REVOKE_TOKEN = "tokenRequests"; - - static final String QUERRY_DISPLAY_NAME = "displayName"; - static final String QUERRY_PRODUCT_NAME = "GraalVM"; - static final String QUERRY_PRODUCT = "productId"; - static final String QUERRY_METADATA = "metadata"; - static final String QUERRY_ARCH = "arch:"; - static final String QUERRY_OS = "os:"; - static final String QUERRY_TYPE = "type:"; - static final String QUERRY_TYPE_CORE = QUERRY_TYPE + "core"; - static final String QUERRY_TYPE_COMP = QUERRY_TYPE + "component"; - static final String QUERRY_RELEASE = "release:"; - static final String QUERRY_JAVA = "java:"; - static final String QUERRY_LIMIT_KEY = "limit"; - static final String QUERRY_LIMIT_VAL = "1000"; - - public static final String HEADER_VAL_GZIP = "gzip"; - static final String HEADER_ENCODING = "Accept-Encoding"; - static final String HEADER_USER_AGENT = "User-Agent"; - final String gdsUserAgent; - - final String baseURL; - final Feedback feedback; - final Map> params = new HashMap<>(); - - final String productId; - - GDSRESTConnector(String baseURL, Feedback feedback, String productId, Version gvmVersion) { - if (baseURL == null || baseURL.isBlank()) { - throw new IllegalArgumentException("Base URL String can't be empty."); - } - URL url = null; - try { - url = SystemUtils.toURL(baseURL); - } catch (MalformedURLException ex) { - throw new IllegalArgumentException("Base URL String must be convertible to URL."); - } - this.baseURL = url.toString(); - if (feedback == null) { - throw new IllegalArgumentException("Feedback can't be null."); - } - this.feedback = feedback.withBundle(GDSRESTConnector.class); - if (productId == null || productId.isBlank()) { - throw new IllegalArgumentException("Product ID can't be empty."); - } - this.productId = productId; - if (gvmVersion == null || gvmVersion == Version.NO_VERSION) { - throw new IllegalArgumentException("Version can't be empty."); - } - this.gdsUserAgent = String.format("GVM/%s (arch:%s; os:%s; java:%s)", - gvmVersion.toString(), - SystemUtils.ARCH.sysName(), - SystemUtils.OS.sysName(), - SystemUtils.getJavaMajorVersion()); - } - - Map> getParams() { - return params; - } - - public void revokeToken(String token) { - try { - GDSRequester tr = getGDSRequester(baseURL + ENDPOINT_REVOKE_TOKEN, token); - tr.revokeToken(token); - } catch (IOException ex) { - throw feedback.failure("ERR_VerificationEmail", ex, feedback.l10n("MSG_YourEmail")); - } - } - - public void revokeTokens(String email) { - try { - GDSRequester tr = getGDSRequester(baseURL + ENDPOINT_REVOKE_TOKEN, email); - tr.revokeTokens(email); - } catch (IOException ex) { - throw feedback.failure("ERR_VerificationEmail", ex, email); - } - } - - public FileDownloader obtainComponents() { - fillMetaComponent(); - return obtainArtifacts(); - } - - public FileDownloader obtainComponents(String releaseVersion) { - fillMetaRelease(releaseVersion); - return obtainComponents(); - } - - public FileDownloader obtainReleases(String javaVersion) { - fillMetaJava(javaVersion); - return obtainReleases(); - } - - public FileDownloader obtainReleases() { - fillMetaCore(); - return obtainArtifacts(); - } - - public FileDownloader obtainArtifacts(String javaVersion) { - fillMetaJava(javaVersion); - return obtainArtifacts(); - } - - public FileDownloader obtainArtifacts() { - fillArtifacts(); - return obtain(ENDPOINT_ARTIFACTS); - } - - public FileDownloader obtainProduct() { - fillDisplayName(); - return obtain(ENDPOINT_PRODUCTS); - } - - public String sendVerificationEmail(String email, String licAddr, String config) { - assert (SystemUtils.nonBlankString(email) && config == null) || (SystemUtils.nonBlankString(config) && email == null); - String licID = licAddr.substring(licAddr.lastIndexOf("/") + 1); - String acceptLicLink = baseURL + ENDPOINT_LICENSE_ACCEPT; - String token = config; - try { - GDSRequester tr = getGDSRequester(acceptLicLink, licID); - token = email != null ? tr.obtainConfig(email) : tr.acceptLic(config); - } catch (IOException ex) { - throw feedback.failure("ERR_VerificationEmail", ex, email == null ? feedback.l10n("MSG_YourEmail") : email); - } - return token; - } - - public String makeLicenseURL(String licenseId) { - return baseURL + ENDPOINT_LICENSE + licenseId; - } - - public String makeArtifactsURL(String javaVersion) { - fillArtifacts(); - fillMetaJava(javaVersion); - String out = SystemUtils.buildUrlStringWithParameters(baseURL + ENDPOINT_ARTIFACTS, getParams()); - params.clear(); - return out; - } - - public String makeReleaseCatalogURL(String releaseVersion, String javaVersion) { - fillArtifacts(); - fillMetaJava(javaVersion); - fillMetaRelease(releaseVersion); - String out = SystemUtils.buildUrlStringWithParameters(baseURL + ENDPOINT_ARTIFACTS, getParams()); - params.clear(); - return out; - } - - URL makeArtifactDownloadURL(String id) { - String url = baseURL + ENDPOINT_ARTIFACTS + id + ENDPOINT_DOWNLOAD; - try { - return SystemUtils.toURL(url); - } catch (MalformedURLException ex) { - feedback.error("ERR_MalformedArtifactUrl", ex, url); - } - return null; - } - - protected FileDownloader obtain(String endpoint) { - addParam(QUERRY_LIMIT_KEY, QUERRY_LIMIT_VAL); - try { - FileDownloader dn = new FileDownloader( - feedback.l10n("OLDS_ReleaseFile"), - SystemUtils.toURL(SystemUtils.buildUrlStringWithParameters(baseURL + endpoint, getParams())), - feedback); - fillBasics(dn); - dn.download(); - return dn; - } catch (IOException ex) { - throw feedback.failure("ERR_CouldNotLoadGDS", ex, baseURL, ex.getLocalizedMessage()); - } finally { - params.clear(); - } - } - - private void fillArtifacts() { - fillProductId(); - fillMetaArchAndOS(); - } - - private void fillProductId() { - addParam(QUERRY_PRODUCT, productId); - } - - private void fillDisplayName() { - addParam(QUERRY_DISPLAY_NAME, QUERRY_PRODUCT_NAME); - } - - private void fillMetaArchAndOS() { - addParam(QUERRY_METADATA, QUERRY_ARCH + SystemUtils.ARCH.get().getName()); - addParam(QUERRY_METADATA, QUERRY_OS + SystemUtils.OS.get().getName()); - } - - private void fillMetaCore() { - addParam(QUERRY_METADATA, QUERRY_TYPE_CORE); - } - - private void fillMetaComponent() { - addParam(QUERRY_METADATA, QUERRY_TYPE_COMP); - } - - private void fillMetaRelease(String releaseVersion) { - addParam(QUERRY_METADATA, QUERRY_RELEASE + releaseVersion); - } - - private void fillMetaJava(String javaVersion) { - addParam(QUERRY_METADATA, QUERRY_JAVA + "jdk" + javaVersion); - } - - private void addParam(String key, String value) { - params.computeIfAbsent(key, k -> new ArrayList<>()).add(value); - } - - public void fillBasics(FileDownloader fd) { - fd.addRequestHeader(HEADER_USER_AGENT, gdsUserAgent); - fd.addRequestHeader(HEADER_ENCODING, HEADER_VAL_GZIP); - } - - GDSRequester getGDSRequester(String acceptLicLink, String licID) throws MalformedURLException { - return new GDSRequester(SystemUtils.toURL(acceptLicLink), licID); - } - - class GDSRequester { - static final String GENERATE_CONFIG = "GENERATE_TOKEN_AND_ACCEPT_LICENSE"; - static final String ACCEPT_LICENSE = "ACCEPT_LICENSE_USING_TOKEN"; - static final String REVOKE_TOKEN = "REVOKE"; - - static final String HEADER_CONTENT = "Content-Type"; - static final String HEADER_VAL_JSON = "application/json"; - - static final String REQUEST_CONFIG_BODY = "{\"type\":\"%s\",\"email\":\"%s\",\"licenseId\":\"%s\"}"; - static final String REQUEST_ACCEPT_BODY = "{\"type\":\"%s\",\"token\":\"%s\",\"licenseId\":\"%s\"}"; - static final String REQUEST_REVOKE_BODY = "{\"type\":\"%s\",\"downloadToken\":\"%s\"}"; - static final String REQUEST_REVOKE_ALL_BODY = "{\"type\":\"%s\",\"email\":\"%s\"}"; - - static final String JSON_CONFIG = "token"; - - final URL url; - final String id; - URLConnectionFactory factory; - - GDSRequester(URL url, String id) { - this.url = url; - this.id = id; - } - - public String obtainConfig(String email) throws IOException { - String config = null; - URLConnection connector = getConnectionFactory().createConnection(url, createConfigCallBack(Request.GENERATE, email)); - String response = null; - try (BufferedReader reader = new BufferedReader(new InputStreamReader(connector.getInputStream()))) { - response = reader.lines().collect(Collectors.joining()); - config = new JSONObject(response).getString(JSON_CONFIG); - } catch (JSONException ex) { - throw feedback.failure("ERR_ResponseBody", ex, response); - } - if (!SystemUtils.nonBlankString(config)) { - throw feedback.failure("ERR_ResponseBody", null, response); - } - return config; - } - - public String acceptLic(String config) throws IOException { - return connect(Request.ACCEPT, config); - } - - public void revokeTokens(String email) throws IOException { - connect(Request.REVOKE_ALL, email); - } - - public void revokeToken(String token) throws IOException { - connect(Request.REVOKE, token); - } - - private String connect(Request req, String content) throws IOException { - getConnectionFactory().createConnection(url, createConfigCallBack(req, content)).connect(); - return content; - } - - private String generateRequestBody(Request req, String content) { - return String.format(getRequestFormat(req), - getRequestName(req), - content, - id); - } - - private String getRequestFormat(Request req) { - switch (req) { - case REVOKE_ALL: - return REQUEST_REVOKE_ALL_BODY; - case REVOKE: - return REQUEST_REVOKE_BODY; - case ACCEPT: - return REQUEST_ACCEPT_BODY; - case GENERATE: - return REQUEST_CONFIG_BODY; - } - return null; - } - - private String getRequestName(Request req) { - switch (req) { - case REVOKE_ALL: - case REVOKE: - return REVOKE_TOKEN; - case ACCEPT: - return ACCEPT_LICENSE; - case GENERATE: - return GENERATE_CONFIG; - } - return null; - } - - private URLConnectionFactory.Configure createConfigCallBack(Request req, String content) { - return (URLConnection connector) -> { - connector.addRequestProperty(HEADER_USER_AGENT, gdsUserAgent); - connector.setDoOutput(true); - connector.setRequestProperty(HEADER_CONTENT, HEADER_VAL_JSON); - try (OutputStreamWriter out = new OutputStreamWriter(connector.getOutputStream())) { - out.append(generateRequestBody(req, content)); - } - }; - } - - URLConnectionFactory getConnectionFactory() throws MalformedURLException { - if (factory == null) { - factory = new ProxyConnectionFactory(feedback, SystemUtils.toURL(baseURL)); - } - return factory; - } - } - - enum Request { - GENERATE, - ACCEPT, - REVOKE, - REVOKE_ALL - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSTokenStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSTokenStorage.java deleted file mode 100644 index 0ed70eb57674..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/gds/rest/GDSTokenStorage.java +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.gds.rest; - -import org.graalvm.component.installer.CommandInput; -import static org.graalvm.component.installer.CommonConstants.SYSPROP_USER_HOME; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Properties; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.gds.GdsCommands; -import static org.graalvm.component.installer.CommonConstants.PATH_GDS_CONFIG; -import org.graalvm.component.installer.SystemUtils; -import java.nio.file.attribute.PosixFilePermission; -import java.util.Set; -import static org.graalvm.component.installer.CommonConstants.PATH_USER_GU; -import java.io.File; -import java.util.Map; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.gds.MailStorage; - -/** - * - * @author odouda - */ -public class GDSTokenStorage { - - static final String GRAAL_EE_DOWNLOAD_TOKEN = "GRAAL_EE_DOWNLOAD_TOKEN"; - private final Feedback feedback; - private final CommandInput input; - private final Path propertiesPath; - - private Source tokenSource = Source.NON; - private Properties properties; - private boolean changed; - - public GDSTokenStorage(Feedback feedback, CommandInput input) { - this.feedback = feedback.withBundle(GDSTokenStorage.class); - this.input = input; - propertiesPath = Path.of(System.getProperty(SYSPROP_USER_HOME), PATH_USER_GU, PATH_GDS_CONFIG); - } - - Path getPropertiesPath() { - return propertiesPath; - } - - public Source getConfSource() { - return tokenSource; - } - - private Properties load() { - if (properties != null) { - return properties; - } - return properties = load(getPropertiesPath()); - } - - private Properties load(Path propsPath) { - Properties props = new Properties(); - if (Files.exists(propsPath)) { - try (InputStream is = Files.newInputStream(propsPath)) { - props.load(is); - } catch (IllegalArgumentException | IOException ex) { - feedback.error("ERR_CouldNotLoadToken", ex, propsPath, ex.getLocalizedMessage()); - } - } - return props; - } - - public String getToken() { - String token = getCmdToken(); - if (SystemUtils.nonBlankString(token)) { - tokenSource = Source.CMD; - return token; - } - token = getEnvToken(); - if (SystemUtils.nonBlankString(token)) { - tokenSource = Source.ENV; - return token; - } - token = getFileToken(); - if (SystemUtils.nonBlankString(token)) { - tokenSource = Source.FIL; - return token; - } - tokenSource = Source.NON; - return null; - } - - private String getCmdToken() { - String userFile = getCmdFile(); - if (!SystemUtils.nonBlankString(userFile)) { - return null; - } - return load(SystemUtils.fromUserString(userFile)).getProperty(GRAAL_EE_DOWNLOAD_TOKEN); - } - - private String getCmdFile() { - return input.optValue(GdsCommands.OPTION_GDS_CONFIG); - } - - private String getEnvToken() { - return input.getParameter(GRAAL_EE_DOWNLOAD_TOKEN, false); - } - - private String getFileToken() { - return load().getProperty(GRAAL_EE_DOWNLOAD_TOKEN); - } - - public void setToken(String token) { - if (token == null) { - throw new IllegalArgumentException("Download token cannot be null."); - } - String p = getFileToken(); - if (token.equals(p)) { - return; - } - properties.setProperty(GRAAL_EE_DOWNLOAD_TOKEN, token); - changed = true; - } - - public void save() throws IOException { - Path propsPath = getPropertiesPath(); - if (!changed || properties == null || propsPath == null) { - return; - } - Path parent = propsPath.getParent(); - if (parent == null) { - // cannot happen, but Spotbugs keeps yelling - return; - } - Files.createDirectories(parent); - if (SystemUtils.isWindows()) { - File file = parent.toFile(); - file.setReadable(false, false); - file.setExecutable(false, false); - file.setWritable(false, false); - file.setReadable(true); - file.setExecutable(true); - file.setWritable(true); - } else { - Files.setPosixFilePermissions(parent, Set.of(PosixFilePermission.OWNER_READ, - PosixFilePermission.OWNER_WRITE, - PosixFilePermission.OWNER_EXECUTE)); - } - try (OutputStream os = Files.newOutputStream(propsPath)) { - properties.store(os, null); - } - if (SystemUtils.isWindows()) { - File file = propsPath.toFile(); - file.setReadable(false, false); - file.setExecutable(false, false); - file.setWritable(false, false); - file.setReadable(true); - file.setWritable(true); - } else { - Files.setPosixFilePermissions(propsPath, - Set.of(PosixFilePermission.OWNER_READ, - PosixFilePermission.OWNER_WRITE)); - } - changed = false; - } - - public static void printToken(Feedback feedback, CommandInput input) { - new GDSTokenStorage(feedback, input).printToken(); - } - - public static void revokeToken(Feedback feedback, CommandInput input, String token) { - new GDSTokenStorage(feedback, input).revokeToken(token); - } - - public static void revokeAllTokens(Feedback feedback, CommandInput input, String email) { - new GDSTokenStorage(feedback, input).revokeAllTokens(email); - } - - public void revokeAllTokens(String email) { - GDSRESTConnector connector = makeConnector(); - if (connector == null) { - feedback.message("MSG_NoGDSAddress"); - return; - } - String m = MailStorage.checkEmailAddress(email, feedback); - if (m == null || m.isEmpty()) { - feedback.message("MSG_NoEmail"); - return; - } - connector.revokeTokens(m); - feedback.message("MSG_AcceptRevoke"); - } - - public void revokeToken(String token) { - GDSRESTConnector connector = makeConnector(); - if (connector == null) { - feedback.message("MSG_NoGDSAddress"); - return; - } - String t = token; - if (t == null || t.isEmpty()) { - t = getFileToken(); - if (t == null || t.isEmpty()) { - feedback.message("MSG_NoRevokableToken"); - return; - } - removeFileToken(); - } - connector.revokeToken(t); - feedback.message("MSG_AcceptRevoke"); - } - - GDSRESTConnector makeConnector() { - Map caps = input.getLocalRegistry().getGraalCapabilities(); - String releaseCatalog = caps.get(CommonConstants.RELEASE_CATALOG_KEY); - if (releaseCatalog == null || releaseCatalog.isEmpty()) { - return null; - } - String[] catalogs = releaseCatalog.split("\\|"); - String catalog = null; - for (String c : catalogs) { - if (c.contains("rest://")) { - catalog = "https" + c.substring(c.indexOf("rest://") + 4); - } - } - if (catalog == null || catalog.isEmpty()) { - return null; - } - return new GDSRESTConnector(catalog, feedback, caps.get(CommonConstants.RELEASE_GDS_PRODUCT_ID_KEY), input.getLocalRegistry().getGraalVersion()); - } - - public void removeFileToken() { - load().remove(GRAAL_EE_DOWNLOAD_TOKEN); - changed = true; - try { - save(); - } catch (IOException ex) { - feedback.error("ERR_CouldNotRemoveToken", ex); - } - } - - public void printToken() { - String token = getToken(); - String msg = tokenSource == Source.NON ? "MSG_EmptyToken" : "MSG_PrintToken"; - String source = ""; - switch (tokenSource) { - case ENV: - source = feedback.l10n("MSG_PrintTokenEnv", GRAAL_EE_DOWNLOAD_TOKEN); - break; - case CMD: - source = feedback.l10n("MSG_PrintTokenCmdFile", getCmdFile()); - break; - case FIL: - source = feedback.l10n("MSG_PrintTokenFile", getPropertiesPath().toString()); - break; - default: - // NOOP - break; - } - feedback.output(msg, token, source); - } - - public enum Source { - NON, - ENV, - CMD, - FIL - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/Bundle.properties deleted file mode 100644 index 7b5387c9ed1c..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -# {0} - component ID -# {1} - component version -LICENSE_Path_translation=LICENSE-{0}-{1} -ERROR_LoadLicense=Could not load license from archive path {0}: {1} -ERROR_LicenseNotFound=License not found in archive: {0} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/JarArchive.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/JarArchive.java deleted file mode 100644 index ba119d2e958c..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/JarArchive.java +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.jar; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.ByteBuffer; -import java.nio.channels.ReadableByteChannel; -import java.util.Enumeration; -import java.util.Iterator; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.zip.CRC32; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.model.ComponentInfo; - -/** - * - * @author sdedic - */ -public class JarArchive implements Archive { - private static final int CHECKSUM_BUFFER_SIZE = 1024 * 32; - - private final JarFile jarFile; - - public JarArchive(JarFile jarFile) { - this.jarFile = jarFile; - } - - public FileEntry getEntry(String path) { - return getJarEntry(path); - } - - public FileEntry getJarEntry(String path) { - JarEntry e = jarFile.getJarEntry(path); - return e == null ? null : new JarEntryImpl(e); - } - - @Override - public Iterator iterator() { - return new EntryIterator(jarFile.entries()); - } - - @Override - public void close() throws IOException { - } - - @Override - public InputStream getInputStream(FileEntry e) throws IOException { - return jarFile.getInputStream(((JarEntryImpl) e).e); - } - - @Override - public boolean checkContentsMatches(ReadableByteChannel bc, FileEntry entry) throws IOException { - ByteBuffer bb = ByteBuffer.allocate(CHECKSUM_BUFFER_SIZE); - CRC32 crc = new CRC32(); - while (bc.read(bb) >= 0) { - bb.flip(); - crc.update(bb); - bb.clear(); - } - return crc.getValue() == ((JarEntryImpl) entry).e.getCrc(); - } - - @Override - public void completeMetadata(ComponentInfo info) throws IOException { - // no op - } - - /** - * Always returns true. Signer JARs are automatically verified on open - * - * @return true - */ - @Override - public boolean verifyIntegrity(CommandInput input) { - return true; - } - - private static class EntryIterator implements Iterator { - private final Enumeration enEntries; - - EntryIterator(Enumeration enEntries) { - this.enEntries = enEntries; - } - - @Override - public boolean hasNext() { - return enEntries.hasMoreElements(); - } - - @Override - public JarEntryImpl next() { - return new JarEntryImpl(enEntries.nextElement()); - } - } - - private static class JarEntryImpl implements FileEntry { - private final JarEntry e; - - JarEntryImpl(JarEntry e) { - this.e = e; - } - - @Override - public String getName() { - return e.getName(); - } - - @Override - public boolean isDirectory() { - return e.isDirectory(); - } - - @Override - public long getSize() { - return e.getSize(); - } - - @Override - public boolean isSymbolicLink() { - return false; - } - - @Override - public String getLinkTarget() throws IOException { - throw new IllegalStateException("Not a symbolic link"); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/JarMetaLoader.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/JarMetaLoader.java deleted file mode 100644 index 406daf0aeb25..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/jar/JarMetaLoader.java +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.jar; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.function.Function; -import java.util.jar.Attributes; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; -import java.util.jar.Manifest; -import java.util.stream.Collectors; -import org.graalvm.component.installer.Archive; -import static org.graalvm.component.installer.BundleConstants.META_INF_PATH; -import static org.graalvm.component.installer.BundleConstants.META_INF_PERMISSIONS_PATH; -import static org.graalvm.component.installer.BundleConstants.META_INF_SYMLINKS_PATH; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.ComponentPackageLoader; - -/** - * - * @author sdedic - */ -public class JarMetaLoader extends ComponentPackageLoader { - private final JarFile jarFile; - @SuppressWarnings("unused") - // TODO: refactor construction - private final Feedback fb; - - public JarMetaLoader(JarFile jarFile, Feedback feedback) throws IOException { - this(jarFile, null, feedback); - } - - public JarMetaLoader(JarFile jarFile, String serial, Feedback feedback) throws IOException { - super(serial, new ManifestValues(jarFile), feedback); - this.jarFile = jarFile; - this.fb = feedback.withBundle(JarMetaLoader.class); - } - - private static class ManifestValues implements Function { - private final Manifest mf; - private final Attributes mainAttributes; - - ManifestValues(JarFile jf) throws IOException { - this.mf = jf.getManifest(); - this.mainAttributes = mf == null ? null : mf.getMainAttributes(); - } - - @Override - public String apply(String t) { - return mainAttributes == null ? null : mainAttributes.getValue(t); - } - - } - - @Override - public void close() throws IOException { - super.close(); - jarFile.close(); - } - - @Override - public Archive getArchive() { - return new JarArchive(jarFile); - } - - @Override - public Map loadPermissions() throws IOException { - JarEntry permEntry = jarFile.getJarEntry(META_INF_PERMISSIONS_PATH); - if (permEntry == null) { - return Collections.emptyMap(); - } - try (BufferedReader r = new BufferedReader(new InputStreamReader( - jarFile.getInputStream(permEntry), "UTF-8"))) { - Map permissions = parsePermissions(r); - return permissions; - } - } - - @Override - public void loadPaths() { - ComponentInfo cinfo = getComponentInfo(); - Set emptyDirectories = new HashSet<>(); - List files = new ArrayList<>(); - for (JarEntry en : Collections.list(jarFile.entries())) { - String eName = en.getName(); - if (eName.startsWith(META_INF_PATH)) { - continue; - } - int li = eName.lastIndexOf("/", en.isDirectory() ? eName.length() - 2 : eName.length() - 1); - if (li > 0) { - emptyDirectories.remove(eName.substring(0, li + 1)); - } - if (en.isDirectory()) { - // directory names always come first - emptyDirectories.add(eName); - } else { - files.add(eName); - } - } - addFiles(new ArrayList<>(emptyDirectories)); - // sort empty directories first - Collections.sort(files); - cinfo.addPaths(files); - addFiles(files); - } - - @Override - public Map loadSymlinks() throws IOException { - JarEntry symEntry = jarFile.getJarEntry(META_INF_SYMLINKS_PATH); - if (symEntry == null) { - return Collections.emptyMap(); - } - Properties links = new Properties(); - try (InputStream istm = jarFile.getInputStream(symEntry)) { - links.load(istm); - } - return parseSymlinks(links); - } - - @Override - public String getLicenseID() { - String licPath = getLicensePath(); - if (licPath == null) { - return null; - } - if (SystemUtils.isRemotePath(licPath)) { - return super.getLicenseID(); - } - JarEntry je = jarFile.getJarEntry(licPath); - if (je == null) { - throw fb.failure("ERROR_LicenseNotFound", null, getLicensePath()); - } - try (BufferedReader r = new BufferedReader(new InputStreamReader( - jarFile.getInputStream(je), "UTF-8"))) { - String text = r.lines().collect(Collectors.joining("\n")); - return SystemUtils.digestString(text, false); - } catch (IOException ex) { - throw fb.failure("ERROR_LoadLicense", ex, getLicensePath(), ex.getLocalizedMessage()); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/Bundle.properties deleted file mode 100644 index a6b20b546cc7..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/Bundle.properties +++ /dev/null @@ -1,6 +0,0 @@ -ComponentStabilityLevel_supported=Supported -ComponentStabilityLevel_earlyadopter=Early adopter -ComponentStabilityLevel_experimental=Experimental -# Need to have non-empty display string, to allow "sane" parsing of of output. -ComponentStabilityLevel_undefined=- -ComponentStabilityLevel_experimental_earlyadopter=Early adopter (experimental) diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/CatalogContents.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/CatalogContents.java deleted file mode 100644 index 56c865af7629..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/CatalogContents.java +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.io.IOException; -import java.nio.file.NoSuchFileException; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Deque; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.Version; - -/** - * - * @author sdedic - */ -public final class CatalogContents implements ComponentCatalog { - private static final List NONE = new ArrayList<>(); - - private final ComponentStorage storage; - private final Feedback env; - private final Map> components = new HashMap<>(); - private final Version graalVersion; - private final ComponentRegistry installed; - private final Verifier verifier; - private final Verifier capVerifier; - private final DownloadInterceptor downloadInterceptor; - - private boolean remoteEnabled = true; - - /** - * Allows update to a newer distribution, not just patches. This will cause components from - * newer GraalVM distributions to be accepted, even though it means a reinstall. Normally just - * minor patches are accepted so the current component can be replaced. - */ - private boolean allowDistUpdate; - - public CatalogContents(Feedback env, ComponentStorage storage, ComponentRegistry inst) { - this(env, storage, inst, inst.getGraalVersion()); - } - - public CatalogContents(Feedback env, ComponentStorage storage, ComponentRegistry inst, Version version) { - this.storage = storage; - this.env = env.withBundle(Feedback.class); - this.verifier = new Verifier(env, inst, this); - this.capVerifier = new Verifier(env, inst, this); - this.graalVersion = version; - this.installed = inst; - - verifier.ignoreExisting(true); - verifier.setSilent(true); - verifier.setCollectErrors(true); - verifier.setVersionMatch(graalVersion.match(Version.Match.Type.SATISFIES)); - - // just verify required capabilities: - capVerifier.ignoreExisting(true); - capVerifier.setSilent(true); - capVerifier.setCollectErrors(true); - // ignore graal version, compare just the required capabilities. - capVerifier.setVersionMatch(Version.NO_VERSION.match(Version.Match.Type.GREATER)); - - if (storage instanceof DownloadInterceptor) { - this.downloadInterceptor = (DownloadInterceptor) storage; - } else { - this.downloadInterceptor = (a, b) -> b; - } - } - - public boolean compatibleVersion(ComponentInfo info) { - // excludes components that depend on obsolete versions - // excludes components that depend on - Version v = info.getVersion(); - Version gv = graalVersion; - if (allowDistUpdate) { - return gv.updatable().compareTo(v.updatable()) <= 0; - } else { - Version giv = gv.installVersion(); - Version civ = v.installVersion(); - return giv.equals(civ); - } - } - - public void setRemoteEnabled(boolean remoteEnabled) { - this.remoteEnabled = remoteEnabled; - } - - @Override - public boolean isRemoteEnabled() { - return remoteEnabled; - } - - private ComponentInfo compatibleComponent(List cis, Version.Match versionSelect, boolean fallback) { - if (cis == null) { - return null; - } - ComponentInfo first = null; - Version.Match vm = versionMatch(versionSelect, cis); - boolean explicit = versionSelect != null && versionSelect.getType() != Version.Match.Type.MOSTRECENT; - for (int i = cis.size() - 1; i >= 0; i--) { - ComponentInfo ci = cis.get(i); - if (first == null) { - first = ci; - } - Version v = ci.getVersion(); - if (!vm.test(v)) { - continue; - } - if (verifier.validateRequirements(ci).hasErrors()) { - continue; - } - if (explicit || compatibleVersion(ci)) { - return ci; - } - } - return fallback ? first : null; - } - - /** - * @return True, if components from newer distributions are allowed. - */ - @Override - public boolean isAllowDistUpdate() { - return allowDistUpdate; - } - - /** - * Enables components from newer distributions. - * - * @param allowDistUpdate - */ - @Override - public void setAllowDistUpdate(boolean allowDistUpdate) { - this.allowDistUpdate = allowDistUpdate; - } - - private Version.Match versionMatch(Version.Match m, List infos) { - if (m != null && m.getType() != Version.Match.Type.MOSTRECENT) { - return resolveMatch(m, infos, env); - } - Version v = m == null ? graalVersion : m.getVersion(); - if (v == Version.NO_VERSION) { - v = graalVersion; - } - return v.match(allowDistUpdate ? Version.Match.Type.INSTALLABLE : Version.Match.Type.COMPATIBLE); - } - - private static Version.Match resolveMatch(Version.Match vm, List comps, Feedback f) { - if (vm == null) { - return null; - } - List vers = new ArrayList<>(comps.size()); - for (ComponentInfo ci : comps) { - vers.add(ci.getVersion()); - } - Collections.sort(vers); - return vm.resolveWildcards(vers, f); - } - - @Override - public ComponentInfo findComponentMatch(String id, Version.Match vm, boolean exact) { - if (id == null) { - return null; - } - List infos = doLoadComponents(id, false, exact); - if (infos == null) { - return null; - } - return compatibleComponent(infos, vm, false); - } - - @Override - public String shortenComponentId(ComponentInfo info) { - String id = info.getId(); - if (id.startsWith(CommonConstants.GRAALVM_CORE_PREFIX)) { - int l = CommonConstants.GRAALVM_CORE_PREFIX.length(); - if (id.length() == l) { - return CommonConstants.GRAALVM_CORE_SHORT_ID; - } - if (id.charAt(l) != '.' && id.length() > l + 1) { - return id; - } - String shortId = id.substring(l + 1); - // special case: if the component is local, do not go to catalogs. - if (info.getRemoteURL() == null) { - return shortId; - } - try { - Collection regs = doLoadComponents(shortId, false, false); - if (regs == null) { - return shortId; - } - boolean success = true; - for (ComponentInfo reg : regs) { - if (!reg.getId().equals(id)) { - success = false; - break; - } - } - if (success) { - return shortId; - } - } catch (FailedOperationException ex) { - // ambiguous, ignore - } - } - return id; - } - - @Override - public Collection getComponentIDs() { - try { - return storage.listComponentIDs(); - } catch (IOException ex) { - throw env.failure("REGISTRY_ReadingComponentList", ex, ex.getLocalizedMessage()); - } - } - - private String findAbbreviatedId(String id) { - String candidate = null; - String lcid = id.toLowerCase(Locale.ENGLISH); - String end = "." + lcid; // NOI18N - Collection ids = getComponentIDs(); - String ambiguous = null; - for (String s : ids) { - String lcs = s.toLowerCase(Locale.ENGLISH); - if (lcs.equals(lcid)) { - return s; - } - if (lcs.endsWith(end)) { - if (candidate != null) { - ambiguous = s; - } else { - candidate = s; - } - } - } - if (ambiguous != null) { - throw env.failure("COMPONENT_AmbiguousIdFound", null, candidate, ambiguous); - } - return candidate; - } - - @Override - public Collection loadComponents(String id, Version.Match vmatch, boolean filelist) { - List v = doLoadComponents(id, filelist, false); - if (v == null) { - return null; - } - if (vmatch.getType() == Version.Match.Type.MOSTRECENT) { - ComponentInfo comp = compatibleComponent(v, versionMatch(vmatch, v), true); - return comp == null ? Collections.emptyList() : Collections.singleton(comp); - } - Version.Match resolvedMatch = resolveMatch(vmatch, v, env); - List versions = new ArrayList<>(v); - for (Iterator it = versions.iterator(); it.hasNext();) { - ComponentInfo cv = it.next(); - if (!resolvedMatch.test(cv.getVersion())) { - it.remove(); - } - } - return versions; - } - - private List doLoadComponents(String id, boolean filelist, boolean exact) { - String fid = exact ? id : findAbbreviatedId(id); - if (fid == null) { - return null; - } - List v = components.get(fid); - if (v == null) { - try { - Set infos = storage.loadComponentMetadata(fid); - if (infos == null || infos.isEmpty()) { - components.put(fid, NONE); - return null; - } - List versions = new ArrayList<>(infos); - for (Iterator it = versions.iterator(); it.hasNext();) { - ComponentInfo ci = it.next(); - // skip components that require capabilities that we do not have. - // Catalogs contain just "right" components, but in case someone will - // mess up the content, or directory-based mess catalog, the filter is handy. - if (capVerifier.validateRequirements(ci).hasErrors()) { - it.remove(); - } - } - Collections.sort(versions, ComponentInfo.versionComparator(installed.getManagementStorage())); - if (filelist) { - for (ComponentInfo ci : infos) { - storage.loadComponentFiles(ci); - } - components.put(fid, versions); - } - v = versions; - } catch (NoSuchFileException ex) { - return null; - } catch (IOException ex) { - throw env.failure("REGISTRY_ReadingComponentMetadata", ex, id, ex.getLocalizedMessage(), fid); - } - } - if (v == NONE) { - return null; - } - return v; - } - - @Override - public ComponentInfo findComponentMatch(String id, Version.Match vmatch, boolean localOnly, boolean exact) { - ComponentInfo ci = installed.loadSingleComponent(id, false); - if (ci != null) { - if (vmatch != null && vmatch.test(ci.getVersion())) { - return ci; - } - } - if (localOnly) { - return null; - } - return findComponentMatch(id, vmatch, exact); - } - - @Override - public Set findDependencies(ComponentInfo start, boolean closure, Boolean inst, Set result) { - return findDependencies(start, closure, inst, result, this::findComponentMatch); - } - - public interface ComponentQuery { - ComponentInfo findComponent(String id, Version.Match vmatch, boolean localOnly, boolean exact); - } - - public static Set findDependencies(ComponentInfo start, boolean closure, Boolean inst, Set result, ComponentQuery q) { - Set missing = new HashSet<>(); - Set known = new HashSet<>(); - Deque buffer = new ArrayDeque<>(); - buffer.add(start); - boolean localOnly = Boolean.TRUE.equals(inst); - while (!buffer.isEmpty()) { - ComponentInfo c = buffer.poll(); - Version.Match vm = c.getVersion().match(Version.Match.Type.COMPATIBLE); - for (String d : c.getDependencies()) { - if (!known.add(d)) { - continue; - } - ComponentInfo res = q.findComponent(d, vm, localOnly, true); - if (res == null) { - missing.add(d); - } else { - if (closure) { - buffer.add(res); - } - if (inst == null || (inst == res.isInstalled())) { - result.add(res); - } - } - } - } - return missing.isEmpty() ? null : missing; - } - - @Override - public DownloadInterceptor getDownloadInterceptor() { - return downloadInterceptor; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentInfo.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentInfo.java deleted file mode 100644 index 7bb1de53bce3..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentInfo.java +++ /dev/null @@ -1,492 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; - -/** - * Information about an installable Component. - */ -public final class ComponentInfo { - /** - * Component ID. - */ - private final String id; - - /** - * Version of the component. - */ - private final String versionString; - - /** - * Parsed version of the Component. - */ - private final Version version; - - /** - * Human-readable name of the component. - */ - private final String name; - - /** - * During (un)installation only: the path for the .component info file. - */ - private String infoPath; - - /** - * Versioned license file path. - */ - private String licensePath; - - /** - * License type. - */ - private String licenseType; - - /** - * Assertions on graalVM installation. - */ - private final Map requiredGraalValues = new HashMap<>(); - - private final List paths = new ArrayList<>(); - - private final Set workingDirectories = new LinkedHashSet<>(); - - private final Map providedValues = new HashMap<>(); - - private URL remoteURL; - - private byte[] shaDigest; - - private String postinstMessage; - - private boolean nativeComponent; - - private String tag = ""; - - /** - * Component direct dependencies. Contains component canonical IDs. - */ - private Set dependencies = Collections.emptySet(); - - /** - * Origin of the component. - */ - private String origin; - - /** - * The distribution type. - */ - private DistributionType distributionType = DistributionType.OPTIONAL; - - /** - * Component priority. - */ - private int priority; - - /** - * Implicitly accepted license. - */ - private boolean implicitlyAccepted = false; - - private StabilityLevel stability = StabilityLevel.Undefined; - - public ComponentInfo(String id, String name, String versionString, String tag) { - this.id = id; - this.versionString = versionString; - this.name = name; - this.version = Version.fromString(versionString); - this.tag = tag; - } - - public ComponentInfo(String id, String name, String versionString) { - this(id, name, versionString, ""); // NOI18N - } - - public ComponentInfo(String id, String name, Version v) { - this.id = id; - this.versionString = v == null ? null : v.originalString(); - this.name = name; - this.version = v == null ? Version.NO_VERSION : v; - } - - public String getId() { - return id; - } - - public String getVersionString() { - return versionString; - } - - public String getName() { - return name; - } - - public DistributionType getDistributionType() { - return distributionType; - } - - public void setDistributionType(DistributionType distributionType) { - this.distributionType = distributionType; - } - - public Map getRequiredGraalValues() { - return Collections.unmodifiableMap(requiredGraalValues); - } - - public void addRequiredValues(Map vals) { - String os = vals.get(CommonConstants.CAP_OS_NAME); - String arch = vals.get(CommonConstants.CAP_OS_ARCH); - if (os != null) { - String nos = SystemUtils.normalizeOSName(os, arch); - if (!nos.equals(os)) { - vals.put(CommonConstants.CAP_OS_NAME, nos); - } - } - if (arch != null) { - String narch = SystemUtils.normalizeArchitecture(os, arch); - if (!narch.equals(os)) { - vals.put(CommonConstants.CAP_OS_ARCH, narch); - } - } - requiredGraalValues.putAll(vals); - } - - public void addRequiredValue(String s, String val) { - if (val == null) { - requiredGraalValues.remove(s); - } else { - String v = val; - switch (s) { - case CommonConstants.CAP_OS_ARCH: - v = SystemUtils.normalizeArchitecture(null, val); - break; - case CommonConstants.CAP_OS_NAME: - v = SystemUtils.normalizeOSName(val, null); - break; - default: - break; - } - requiredGraalValues.put(s, v); - } - } - - public void addPaths(List filePaths) { - paths.addAll(filePaths); - } - - public void setPaths(List filePaths) { - paths.clear(); - addPaths(filePaths); - } - - public List getPaths() { - return Collections.unmodifiableList(paths); - } - - public String getInfoPath() { - return infoPath; - } - - public void setInfoPath(String infoPath) { - this.infoPath = infoPath; - } - - public String getLicensePath() { - return licensePath; - } - - public void setLicensePath(String licensePath) { - this.licensePath = licensePath; - } - - public URL getRemoteURL() { - return remoteURL; - } - - public void setRemoteURL(URL remoteURL) { - this.remoteURL = remoteURL; - } - - public byte[] getShaDigest() { - return shaDigest; - } - - public void setShaDigest(byte[] shaDigest) { - this.shaDigest = shaDigest; - } - - public Set getWorkingDirectories() { - return workingDirectories; - } - - public void addWorkingDirectories(Collection dirs) { - workingDirectories.addAll(dirs); - } - - public String getPostinstMessage() { - return postinstMessage; - } - - public void setPostinstMessage(String postinstMessage) { - this.postinstMessage = postinstMessage; - } - - public String getLicenseType() { - return licenseType; - } - - public void setLicenseType(String licenseType) { - this.licenseType = licenseType; - } - - public boolean isImplicitlyAccepted() { - return implicitlyAccepted; - } - - public void setImplicitlyAccepted(boolean implicitlyAccepted) { - this.implicitlyAccepted = implicitlyAccepted; - } - - @Override - public int hashCode() { - int hash = 5; - hash = 37 * hash + Objects.hashCode(this.id); - hash = 37 * hash + Objects.hashCode(this.version); - hash = 37 * hash + Objects.hashCode(this.tag); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final ComponentInfo other = (ComponentInfo) obj; - if (!Objects.equals(this.id, other.id)) { - return false; - } - if (!Objects.equals(this.version, other.version)) { - return false; - } - if (!Objects.equals(this.tag, other.tag)) { - return false; - } - return true; - } - - public Version getVersion() { - return version; - } - - private static Comparator editionComparator(String myEdition) { - return new Comparator<>() { - @Override - public int compare(ComponentInfo o1, ComponentInfo o2) { - if (o1 == null) { - if (o2 == null) { - return 0; - } else { - return -1; - } - } else if (o2 == null) { - return 1; - } - String ed1 = o1.getRequiredGraalValues().get(CommonConstants.CAP_CATALOG_EDITION); - String ed2 = o2.getRequiredGraalValues().get(CommonConstants.CAP_CATALOG_EDITION); - - boolean m1 = Objects.equals(ed1, myEdition); - boolean m2 = Objects.equals(ed2, myEdition); - - // one of the components exactly matches my edition: - if (m1) { - return m2 ? 0 : -1; - } else if (m2) { - return 1; - } - if (ed1 == null) { - ed1 = ""; - } - if (ed2 == null) { - ed2 = ""; - } - return ed1.compareToIgnoreCase(ed2); - } - }; - } - - private static final Comparator COMPARATOR_VERSIONS = new Comparator<>() { - @Override - public int compare(ComponentInfo o1, ComponentInfo o2) { - if (o1 == null) { - if (o2 == null) { - return 0; - } else { - return -1; - } - } else if (o2 == null) { - return 1; - } - - int n = o1.getVersion().compareTo(o2.getVersion()); - if (n == 0) { - return o2.getPriority() - o1.getPriority(); - } else { - return n; - } - } - }; - - @Override - public String toString() { - return getId() + "[" + getVersion().toString() + - (tag.isEmpty() ? "" : "/" + tag) + "]"; // NOI18N - } - - public static Comparator versionComparator() { - return COMPARATOR_VERSIONS; - } - - public static Comparator reverseVersionComparator(ComponentStorage target) { - String myEdition = target.loadGraalVersionInfo().get(CommonConstants.CAP_GRAALVM_VERSION); - return versionComparator().reversed().thenComparing(editionComparator(myEdition)); - } - - public static Comparator versionComparator(ComponentStorage target) { - String myEdition = target.loadGraalVersionInfo().get(CommonConstants.CAP_GRAALVM_VERSION); - return versionComparator().thenComparing(editionComparator(myEdition)); - } - - public String getOrigin() { - return origin; - } - - public void setOrigin(String origin) { - this.origin = origin; - } - - public boolean isNativeComponent() { - return nativeComponent; - } - - public void setNativeComponent(boolean nativeComponent) { - this.nativeComponent = nativeComponent; - } - - public void provideValue(String k, T v) { - providedValues.put(k, v); - } - - public T getProvidedValue(String k, Class type) { - Object o = providedValues.get(k); - if (!type.isInstance(o)) { - if (type != String.class || o == null) { - return null; - } - o = o.toString(); - } - @SuppressWarnings("unchecked") - T ret = (T) o; - return ret; - } - - public Map getProvidedValues() { - return Collections.unmodifiableMap(providedValues); - } - - public void addProvidedValues(Map vals) { - for (String s : vals.keySet()) { - provideValue(s, vals.get(s)); - } - } - - public void setDependencies(Set deps) { - this.dependencies = deps; - } - - public Set getDependencies() { - return Collections.unmodifiableSet(dependencies); - } - - /** - * @return True, if the Component is already installed. - */ - public boolean isInstalled() { - return infoPath != null; - } - - public String getTag() { - return tag; - } - - /** - * Sets the component tag. WARNING: do not use this after Component has been constructed; the - * call will change the hashCode + equals ! - * - * @param tag component tag/serial - */ - public void setTag(String tag) { - this.tag = tag; - } - - public int getPriority() { - return priority; - } - - public void setPriority(int priority) { - this.priority = priority; - } - - public StabilityLevel getStability() { - return stability; - } - - public void setStability(StabilityLevel stab) { - if (stab == null) { - this.stability = StabilityLevel.Undefined; - } else { - this.stability = stab; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentRegistry.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentRegistry.java deleted file mode 100644 index 795fbe77297b..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentRegistry.java +++ /dev/null @@ -1,579 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.io.IOException; -import java.nio.file.NoSuchFileException; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Date; -import java.util.Deque; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.MissingResourceException; -import java.util.Objects; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; - -/** - * Models catalog of installed components. Works closely with {@link ComponentStorage} which handles - * serialization. - */ -public final class ComponentRegistry implements ComponentCollection { - private final ManagementStorage storage; - private final Feedback env; - - /** - * All components have been loaded. - */ - private boolean allLoaded; - - /** - * Indexes files path -> component(s). - */ - private Map> fileIndex; - - /** - * For each component ID, a list of components, in their ascending Version order. - */ - private Map components = new HashMap<>(); - private Map graalAttributes; - private Map> replacedFiles; - private Set componentDirectories; - - /** - * True, if replaced files have been changed. - */ - private boolean replaceFilesChanged; - - /** - * Allows update to a newer distribution, not just patches. This will cause components from - * newer GraalVM distributions to be accepted, even though it means a reinstall. Normally just - * minor patches are accepted so the current component can be replaced. - */ - private boolean allowDistUpdate; - - public ComponentRegistry(Feedback env, ManagementStorage storage) { - this.storage = storage; - this.env = env; - } - - public boolean compatibleVersion(Version v) { - Version gv = getGraalVersion(); - if (allowDistUpdate) { - return gv.updatable().equals(v.updatable()); - } else { - return gv.onlyVersion().equals(v.installVersion()); - } - } - - /** - * @return True, if components from newer distributions are allowed. - */ - @Override - public boolean isAllowDistUpdate() { - return allowDistUpdate; - } - - /** - * Enables components from newer distributions. - * - * @param allowDistUpdate - */ - @Override - public void setAllowDistUpdate(boolean allowDistUpdate) { - this.allowDistUpdate = allowDistUpdate; - } - - @Override - public ComponentInfo findComponentMatch(String idspec, Version.Match vm, boolean exact) { - Version.Match[] vmatch = new Version.Match[1]; - String id = Version.idAndVersion(idspec, vmatch); - if (!allLoaded) { - return loadSingleComponent(id, false, false, exact); - } - ComponentInfo ci = components.get(id); - if (ci != null) { - return ci; - } - String fullId = exact ? id : findAbbreviatedId(id); - return fullId == null ? null : components.get(fullId); - } - - private String findAbbreviatedId(String id) { - String candidate = null; - String lcid = id.toLowerCase(Locale.ENGLISH); - String end = "." + lcid; // NOI18N - Collection ids = getComponentIDs(); - String ambiguous = null; - for (String s : ids) { - String lcs = s.toLowerCase(Locale.ENGLISH); - if (lcs.equals(lcid)) { - return s; - } - if (lcs.endsWith(end)) { - if (candidate != null) { - ambiguous = s; - } else { - candidate = s; - } - } - } - if (ambiguous != null) { - throw env.failure("COMPONENT_AmbiguousIdFound", null, candidate, ambiguous); - } - return candidate; - } - - /** - * Regexp to extract specification version. Optional {@code "1."} in front, optional - * {@code ".micro_patchlevel"} suffix. - */ - private static final Pattern JAVA_VERSION_PATTERN = Pattern.compile("((?:1\\.)?[0-9]+)([._].*)?"); // NOI18N - - private String overrideEdition; - - public void setOverrideEdition(String overrideEdition) { - this.overrideEdition = overrideEdition; - } - - public Map getGraalCapabilities() { - if (graalAttributes != null) { - return graalAttributes; - } - Map m = new HashMap<>(storage.loadGraalVersionInfo()); - String v = m.get(CommonConstants.CAP_JAVA_VERSION); - if (v != null) { - Matcher rm = JAVA_VERSION_PATTERN.matcher(v); - if (rm.matches()) { - v = rm.group(1); - } - int mv = SystemUtils.interpretJavaMajorVersion(v); - if (mv < 1) { - m.remove(CommonConstants.CAP_JAVA_VERSION); - } else { - m.put(CommonConstants.CAP_JAVA_VERSION, "" + mv); // NOI18N - } - graalAttributes = m; - } - // On JDK11, amd64 architecture name changed to x86_64. - v = SystemUtils.normalizeArchitecture( - m.get(CommonConstants.CAP_OS_NAME), - m.get(CommonConstants.CAP_OS_ARCH)); - if (v != null) { - m.put(CommonConstants.CAP_OS_ARCH, v); - } - v = SystemUtils.normalizeOSName( - m.get(CommonConstants.CAP_OS_NAME), - m.get(CommonConstants.CAP_OS_ARCH)); - if (v != null) { - m.put(CommonConstants.CAP_OS_NAME, v); - } - if (overrideEdition != null) { - graalAttributes.put(CommonConstants.CAP_EDITION, overrideEdition); - } - return graalAttributes; - } - - @Override - public Collection getComponentIDs() { - if (!allLoaded) { - try { - return storage.listComponentIDs(); - } catch (IOException ex) { - throw env.failure("REGISTRY_ReadingComponentList", ex, ex.getLocalizedMessage()); - } - } else { - return Collections.unmodifiableCollection(components.keySet()); - } - } - - public void removeComponent(ComponentInfo info) throws IOException { - replaceFilesChanged = false; - buildFileIndex(); - String id = info.getId(); - for (String p : info.getPaths()) { - Collection compIds = fileIndex.get(p); - if (compIds != null && compIds.remove(id)) { - replaceFilesChanged = true; - if (compIds.isEmpty()) { - fileIndex.remove(p); - componentDirectories.remove(p); - } - } - } - if (allLoaded) { - components.remove(id); - } - storage.deleteComponent(id); - updateReplacedFiles(); - } - - /** - * Adds a Component to the registry. Will not save info, but will merge component information - * with the rest. - * - * @param info - */ - public void addComponent(ComponentInfo info) throws IOException { - replaceFilesChanged = false; - // includes load all components - buildFileIndex(); - String id = info.getId(); - for (String p : info.getPaths()) { - Collection compIds = fileIndex.computeIfAbsent(p, (k) -> new HashSet<>()); - replaceFilesChanged |= !compIds.isEmpty(); - compIds.add(id); - if (p.endsWith("/")) { - componentDirectories.add(p); - } - } - if (allLoaded) { - addComponentToCache(info); - } - storage.saveComponent(info); - updateReplacedFiles(); - } - - private void addComponentToCache(ComponentInfo info) { - String id = info.getId(); - ComponentInfo old = components.put(id, info); - if (old != null) { - throw new IllegalStateException("Replacing existing component"); - } - } - - private void computeReplacedFiles() { - Map> shared = new LinkedHashMap<>(); - List keys = new ArrayList<>(fileIndex.keySet()); - Collections.sort(keys); - for (String p : keys) { - Collection compIds = fileIndex.get(p); - if (compIds != null && compIds.size() > 1) { - shared.put(p, compIds); - } - } - this.replacedFiles = shared; - } - - private void updateReplacedFiles() throws IOException { - if (!replaceFilesChanged) { - return; - } - computeReplacedFiles(); - storage.updateReplacedFiles(replacedFiles); - } - - public List getPreservedFiles(ComponentInfo info) { - buildFileIndex(); - - List result = new ArrayList<>(); - for (String p : info.getPaths()) { - Collection compIds = fileIndex.get(p); - if (compIds != null && compIds.size() > 1) { - result.add(p); - } - } - // we should preserve this one - result.add(CommonConstants.PATH_COMPONENT_STORAGE); - return result; - } - - public List getOwners(String p) { - buildFileIndex(); - Collection compIds = fileIndex.get(p); - if (compIds == null) { - return Collections.emptyList(); - } - List ret = new ArrayList<>(compIds); - Collections.sort(ret); - return ret; - } - - public boolean isReplacedFilesChanged() { - return replaceFilesChanged; - } - - private void loadAllComponents() { - if (allLoaded) { - return; - } - String currentId = null; - try { - Collection ids = storage.listComponentIDs(); - components = new HashMap<>(); - for (String id : ids) { - loadSingleComponent(id, true); - } - allLoaded = true; - } catch (IOException ex) { - throw env.failure("REGISTRY_ReadingComponentMetadata", ex, currentId, ex.getLocalizedMessage()); - } - } - - public ComponentInfo loadSingleComponent(String id, boolean filelist) { - return loadSingleComponent(id, filelist, false, false); - } - - @Override - public Collection loadComponents(String id, Version.Match selector, boolean filelist) { - ComponentInfo ci = loadSingleComponent(id, filelist); - return ci == null ? null : Collections.singletonList(ci); - } - - ComponentInfo loadSingleComponent(String id, boolean filelist, boolean notFoundFailure, boolean exact) { - String fid = exact ? id : findAbbreviatedId(id); - if (fid == null) { - if (notFoundFailure) { - throw env.failure("REMOTE_UnknownComponentId", null, id); - } else { - return null; - } - } - ComponentInfo info = components.get(fid); - if (info != null) { - return info; - } - String cid = id; - try { - Collection infos = storage.loadComponentMetadata(fid); - if (infos == null || infos.isEmpty()) { - if (notFoundFailure) { - throw env.failure("REMOTE_UnknownComponentId", null, id); - } - return null; - } - if (infos.size() != 1) { - throw new IllegalArgumentException("Wrong storage"); - } - info = infos.iterator().next(); - cid = info.getId(); // may change if id was an abbreviation - if (filelist) { - storage.loadComponentFiles(info); - components.put(cid, info); - } - } catch (NoSuchFileException ex) { - return null; - } catch (IOException ex) { - throw env.failure("REGISTRY_ReadingComponentMetadata", ex, id, ex.getLocalizedMessage(), fid); - } - return info; - } - - private void buildFileIndex() { - // first load all the components - if (fileIndex != null) { - return; - } - loadAllComponents(); - componentDirectories = new HashSet<>(); - fileIndex = new HashMap<>(); - for (ComponentInfo nfo : components.values()) { - for (String path : nfo.getPaths()) { - if (path.endsWith("/")) { - componentDirectories.add(path); - } - fileIndex.computeIfAbsent(path, (k) -> new ArrayList<>()).add(nfo.getId()); - } - } - computeReplacedFiles(); - } - - public List getReplacedFiles(String path) { - buildFileIndex(); - Collection l = replacedFiles.get(path); - if (l == null) { - return Collections.emptyList(); - } - List ret = new ArrayList<>(l); - Collections.sort(ret); - return ret; - } - - /** - * Computes a set of directories created by components. - * - * @return set of directories created by components - */ - public Set getComponentDirectories() { - buildFileIndex(); - return componentDirectories; - } - - public String localizeCapabilityName(String s) { - String capName = "INSTALL_Capability_" + s.toLowerCase(); - String dispCapName; - try { - dispCapName = env.l10n(capName); - } catch (MissingResourceException ex) { - // some additional header - dispCapName = s; - } - return dispCapName; - } - - @Override - public String shortenComponentId(ComponentInfo info) { - String id = info.getId(); - if (id.startsWith(CommonConstants.GRAALVM_CORE_PREFIX)) { - int l = CommonConstants.GRAALVM_CORE_PREFIX.length(); - if (id.length() == l) { - return CommonConstants.GRAALVM_CORE_SHORT_ID; - } - if (id.charAt(l) != '.' && id.length() > l + 1) { - return id; - } - String shortId = id.substring(l + 1); - try { - ComponentInfo reg = findComponent(shortId); - if (reg == null || reg.getId().equals(id)) { - return shortId; - } - } catch (FailedOperationException ex) { - // ambiguous, ignore - } - } - return id; - } - - public Date isLicenseAccepted(ComponentInfo info, String id) { - return storage.licenseAccepted(info, id); - } - - public void acceptLicense(ComponentInfo info, String id, String text) { - acceptLicense(info, id, text, null); - } - - public void acceptLicense(ComponentInfo info, String id, String text, Date d) { - try { - storage.recordLicenseAccepted(info, id, text, d); - } catch (IOException ex) { - env.error("ERROR_RecordLicenseAccepted", ex, ex.getLocalizedMessage()); - } - } - - private Version graalVer; - - public Version getGraalVersion() { - if (graalVer == null) { - graalVer = Version.fromString(getGraalCapabilities().get(CommonConstants.CAP_GRAALVM_VERSION)); - } - return graalVer; - } - - public Map> getAcceptedLicenses() { - return storage.findAcceptedLicenses(); - } - - public String licenseText(String licId) { - return storage.licenseText(licId); - } - - public boolean isMacOsX() { - return storage.loadGraalVersionInfo().get("os_name").toLowerCase().contains("macos"); - } - - public void verifyAdministratorAccess() throws IOException { - storage.saveComponent(null); - } - - /** - * Finds components which depend on the supplied one. Optionally searches recursively, so it - * finds the dependency closure. - * - * @param recursive create closure of dependent components. - * @param startFrom Component whose dependents should be returned. - * @return Dependent components or closure thereof, depending on parameters - */ - public Set findDependentComponents(ComponentInfo startFrom, boolean recursive) { - if (startFrom == null) { - return Collections.emptySet(); - } - Deque toSearch = new ArrayDeque<>(); - toSearch.add(startFrom.getId()); - Set result = new HashSet<>(); - - while (!toSearch.isEmpty()) { - String id = toSearch.poll(); - for (String cid : getComponentIDs()) { - ComponentInfo ci = loadSingleComponent(cid, false, false, true); - if (ci.getDependencies().contains(id)) { - result.add(ci); - if (recursive) { - toSearch.add(ci.getId()); - } - } - } - } - return result; - } - - public String getJavaVersion() { - return getGraalCapabilities().get(CommonConstants.CAP_JAVA_VERSION); - } - - public ManagementStorage getManagementStorage() { - return storage; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 97 * hash + Objects.hashCode(this.storage); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final ComponentRegistry other = (ComponentRegistry) obj; - if (!Objects.equals(this.storage, other.storage)) { - return false; - } - return true; - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentStorage.java deleted file mode 100644 index 545592035052..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ComponentStorage.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; - -/** - * Serialization of {@link ComponentRegistry}. - */ -public interface ComponentStorage { - /** - * Loads list of components. - * - * @return set of component IDs - * @throws IOException when I/O fails - */ - Set listComponentIDs() throws IOException; - - /** - * Loads component files into its metadata. - * - * @param ci the component metadata - * @return the modified ComponentInfo - * @throws IOException on I/O errors - */ - ComponentInfo loadComponentFiles(ComponentInfo ci) throws IOException; - - /** - * Deserializes Component's metadata. - * - * @param id component ID - * @return matching ComponentInfo instances - * @throws IOException on I/O errors - */ - Set loadComponentMetadata(String id) throws IOException; - - Map loadGraalVersionInfo(); - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/DistributionType.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/DistributionType.java deleted file mode 100644 index 890ba267e814..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/DistributionType.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -/** - * Distribution type for a component. Distribution type determines the operations that can be - * applied to it. - * - * @author sdedic - */ -public enum DistributionType { - /** - * Component is bundled, was installed with the GraalVM package. The component is NOT removable. - */ - BUNDLED, - - /** - * Component was installed as an add-on. It can be removed by the user. This is the default - * value when no distribution type is specified. - */ - OPTIONAL -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/GraalEdition.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/GraalEdition.java deleted file mode 100644 index 0976f4ff3488..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/GraalEdition.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; - -/** - * Represents GraalVM edition. Each installation has an edition. - * - * @author sdedic - */ -public class GraalEdition { - private final String id; - private final String displayName; - private List softwareSources = new ArrayList<>(); - - /** - * Components from that specific edition. - */ - private SoftwareChannel catalogProvider; - - public GraalEdition(String id, String displayName) { - this.id = id; - this.displayName = displayName; - } - - public SoftwareChannel getCatalogProvider() { - return catalogProvider; - } - - public String getId() { - return id; - } - - public String getDisplayName() { - return displayName; - } - - public void setSoftwareSources(List sources) { - this.softwareSources = sources; - } - - public void setCatalogProvider(SoftwareChannel catalogProvider) { - this.catalogProvider = catalogProvider; - } - - public List getSoftwareSources() { - return softwareSources; - } - - @Override - public int hashCode() { - int hash = 3; - hash = 53 * hash + Objects.hashCode(this.id); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final GraalEdition other = (GraalEdition) obj; - if (!Objects.equals(this.id, other.id)) { - return false; - } - return true; - } - - @Override - public String toString() { - if (id.equals(displayName)) { - return "Graal " + id; - } else { - return "Graal " + id + "(" + displayName + ")"; - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ManagementStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ManagementStorage.java deleted file mode 100644 index f53a8a07493f..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/ManagementStorage.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.io.IOException; -import java.util.Collection; -import java.util.Date; -import java.util.Map; - -/** - * - * @author sdedic - */ -public interface ManagementStorage extends ComponentStorage { - /** - * Deletes component's files. - * - * @param id component ID - * @throws IOException on load error - */ - void deleteComponent(String id) throws IOException; - - Map> readReplacedFiles() throws IOException; - - void saveComponent(ComponentInfo info) throws IOException; - - void updateReplacedFiles(Map> replacedFiles) throws IOException; - - /** - * Checks that the license was already accepted. - * - * @param info component for which the license should be checked - * @param licenseID the ID to check - * @return time when the license was accepted - */ - Date licenseAccepted(ComponentInfo info, String licenseID); - - /** - * Records that the license has been accepted. If id is {@code} null, then all license records - * are erased. - * - * @param info the component for which the license is accepted - * @param licenseID the ID to accept or {@code null} - * @param licenseText text of the license, will be recoded. - */ - void recordLicenseAccepted(ComponentInfo info, String licenseID, String licenseText, Date d) throws IOException; - - /** - * Returns accepted licenses. The map is keyed by component ID, values are collections of - * acceped licenses. - * - * @return accepted licenses - */ - Map> findAcceptedLicenses(); - - String licenseText(String licID); -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/RemoteInfoProcessor.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/RemoteInfoProcessor.java deleted file mode 100644 index 10c158f91cb5..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/RemoteInfoProcessor.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -/** - * Interface to decorate ComponentInfo for remote installables. - * - * @author sdedic - */ -public interface RemoteInfoProcessor { - ComponentInfo decorateComponent(ComponentInfo info); - - RemoteInfoProcessor NONE = new RemoteInfoProcessor() { - @Override - public ComponentInfo decorateComponent(ComponentInfo info) { - return info; - } - }; -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/StabilityLevel.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/StabilityLevel.java deleted file mode 100644 index 9395f2284dfa..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/StabilityLevel.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.util.Locale; -import org.graalvm.component.installer.Feedback; - -/** - * Values for the stability level of a component. - * - * @author sdedic - */ -public enum StabilityLevel { - Undefined("undefined"), - Supported("supported"), - EarlyAdopter("earlyadopter"), - Experimental("experimental"), - Experimental_Earlyadopter("experimental-earlyadopter"); - - private final String val; - - StabilityLevel(String aVal) { - val = aVal; - } - - public String displayName(Feedback fb) { - return fb.withBundle(StabilityLevel.class).l10n("ComponentStabilityLevel_" + name().toLowerCase()); - } - - @Override - public String toString() { - if (this == Undefined) { - return ""; - } else { - return val; - } - } - - public static StabilityLevel valueOfMixedCase(String mcs) { - if (mcs.isEmpty()) { - return Undefined; - } - String s = mcs.replaceAll("[^\\p{Alnum}]", "_").toLowerCase(Locale.ENGLISH); - for (StabilityLevel l : StabilityLevel.values()) { - if (l.name().toLowerCase(Locale.ENGLISH).equalsIgnoreCase(s)) { - return l; - } - } - return Undefined; - } - - public static StabilityLevel fromName(String name) { - for (StabilityLevel level : values()) { - if (level.val.equals(name)) { - return level; - } - } - return StabilityLevel.Undefined; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/Verifier.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/Verifier.java deleted file mode 100644 index 41eec5bac658..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/model/Verifier.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.model; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import org.graalvm.component.installer.BundleConstants; -import static org.graalvm.component.installer.BundleConstants.GRAALVM_CAPABILITY; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.ComponentInstaller; -import org.graalvm.component.installer.DependencyException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SuppressFBWarnings; -import org.graalvm.component.installer.Version; - -public class Verifier { - private final Feedback feedback; - private final ComponentRegistry localRegistry; - private final ComponentCollection catalog; - private boolean silent; - private boolean replaceComponents; - private boolean ignoreRequirements; - private boolean collectErrors; - private boolean ignoreExisting; - private boolean collectVersion; - - private Version.Match versionMatch; - private Version minVersion; - private List errors = new ArrayList<>(); - - public Verifier(Feedback feedback, ComponentRegistry registry, ComponentCollection catalog) { - this.feedback = feedback.withBundle(ComponentInstaller.class); - this.localRegistry = registry; - this.catalog = catalog; - } - - public boolean isCollectVersion() { - return collectVersion; - } - - public Verifier collectVersion(boolean collect) { - this.collectVersion = collect; - return this; - } - - public Version getMinVersion() { - return minVersion; - } - - public boolean isSilent() { - return silent; - } - - public void setSilent(boolean silent) { - this.silent = silent; - } - - public Version.Match getVersionMatch() { - return versionMatch; - } - - public Verifier setVersionMatch(Version.Match versionMatch) { - this.versionMatch = versionMatch; - return this; - } - - public boolean hasErrors() { - return !errors.isEmpty(); - } - - public boolean isCollectErrors() { - return collectErrors; - } - - public void setCollectErrors(boolean collectErrors) { - this.collectErrors = collectErrors; - } - - public boolean isIgnoreExisting() { - return ignoreExisting; - } - - public Verifier ignoreExisting(boolean ignore) { - this.ignoreExisting = ignore; - return this; - } - - public boolean isReplaceComponents() { - return replaceComponents; - } - - public Verifier replaceComponents(boolean value) { - this.replaceComponents = value; - return this; - } - - public boolean isIgnoreRequirements() { - return ignoreRequirements; - } - - public Verifier ignoreRequirements(boolean value) { - this.ignoreRequirements = value; - return this; - } - - public Verifier collect(boolean value) { - this.collectErrors = value; - return this; - } - - private void addOrThrow(DependencyException ex) { - if (collectErrors) { - errors.add(ex); - } else { - throw ex; - } - } - - public void printRequirements(ComponentInfo info) { - if (isSilent()) { - return; - } - Map requiredCaps = info.getRequiredGraalValues(); - Map graalCaps = localRegistry.getGraalCapabilities(); - - if (feedback.verboseOutput("VERIFY_VerboseCheckRequirements", catalog.shortenComponentId(info), info.getName(), info.getVersionString())) { - List keys = new ArrayList<>(requiredCaps.keySet()); - Collections.sort(keys); - String none = feedback.l10n("VERIFY_VerboseCapabilityNone"); - for (String s : keys) { - String v = graalCaps.get(s); - feedback.verboseOutput("VERIFY_VerboseCapability", localRegistry.localizeCapabilityName(s), requiredCaps.get(s), v == null ? none : v); - } - } - } - - public List getErrors() { - return errors; - } - - public boolean shouldInstall(ComponentInfo componentInfo) { - if (replaceComponents) { - return true; - } - ComponentInfo existing = localRegistry.findComponent(componentInfo.getId()); - return existing == null || - existing.getVersion().compareTo(componentInfo.getVersion()) < 0; - } - - @SuppressWarnings("StringEquality") - @SuppressFBWarnings(value = "ES_COMPARING_STRINGS_WITH_EQ", justification = "intentional comparison of strings using ==") - public Verifier validateRequirements(ComponentInfo componentInfo) { - errors.clear(); - // check the component is not in the registry - ComponentInfo existing = localRegistry.findComponent(componentInfo.getId()); - if (existing != null) { - if (existing.getVersion().compareTo(componentInfo.getVersion()) >= 0) { - if (!ignoreExisting && !replaceComponents) { - addOrThrow(new DependencyException.Conflict( - existing.getId(), componentInfo.getVersionString(), existing.getVersionString(), - feedback.l10n("VERIFY_ComponentExists", - existing.getName(), existing, existing.getVersionString()))); - } - } - } - if (ignoreRequirements) { - return this; - } - Map requiredCaps = componentInfo.getRequiredGraalValues(); - Map graalCaps = localRegistry.getGraalCapabilities(); - boolean verbose = feedback.verboseOutput(null); - if (!isSilent() && verbose) { - feedback.verboseOutput("VERIFY_VerboseCheckRequirements", catalog.shortenComponentId(componentInfo), componentInfo.getName(), componentInfo.getVersionString()); - List keys = new ArrayList<>(requiredCaps.keySet()); - Collections.sort(keys); - String none = feedback.l10n("VERIFY_VerboseCapabilityNone"); - for (String s : keys) { - String v = graalCaps.get(s); - feedback.verboseOutput("VERIFY_VerboseCapability", localRegistry.localizeCapabilityName(s), requiredCaps.get(s), v == null ? none : v); - } - } - - for (String s : requiredCaps.keySet()) { - String reqVal = requiredCaps.get(s); - String graalVal = graalCaps.get(s); - boolean matches; - if (BundleConstants.GRAAL_VERSION.equals(s)) { - if (versionMatch != null) { - Version cv = Version.fromString( - reqVal.toLowerCase()); - matches = versionMatch.test(cv); - } else { - Version rv = Version.fromString(reqVal); - Version gv = Version.fromString(graalVal); - matches = rv.installVersion().equals(gv.installVersion()); - } - if (!matches) { - Version rq = Version.fromString(reqVal); - Version gv = localRegistry.getGraalVersion(); - int n = gv.compareTo(rq); - if (n > 0) { - if (!gv.installVersion().equals(rq.installVersion())) { - addOrThrow(new DependencyException.Mismatch( - GRAALVM_CAPABILITY, - s, reqVal, graalVal, - feedback.l10n("VERIFY_ObsoleteGraalVM", - componentInfo.getName(), reqVal, gv.displayString()))); - } - } else if (collectVersion) { - minVersion = rq; - } else { - addOrThrow(new DependencyException.Mismatch( - GRAALVM_CAPABILITY, - s, reqVal, graalVal, - feedback.l10n("VERIFY_UpdateGraalVM", - componentInfo.getName(), reqVal, gv.displayString()))); - } - } - continue; - } else { - matches = matches(reqVal, graalVal); - } - if (!matches) { - String val = graalVal != null ? graalVal : feedback.l10n("VERIFY_CapabilityMissing"); - addOrThrow(new DependencyException.Mismatch( - componentInfo.getId(), - s, reqVal, graalVal, - feedback.l10n("VERIFY_Dependency_Failed", - componentInfo.getName(), localRegistry.localizeCapabilityName(s), reqVal, val))); - } - } - return this; - } - - private static boolean matches(String reqVal, String graalVal) { - return !((reqVal != graalVal) && (reqVal == null || graalVal == null || (reqVal.replace('-', '_').compareToIgnoreCase(graalVal.replace('-', '_')) != 0))); - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/Bundle.properties deleted file mode 100644 index 1e3eec2383fe..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -# {0} path to the file or directory -# {1} message -ERR_CannotDeletePath=Could not delete path {0}: {1} -MSG_DeleteObsoleteFiles=Deleting obsolete files... -MSG_CopyNewFiles=Copying in new files... \ No newline at end of file diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/DefaultFileOperations.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/DefaultFileOperations.java deleted file mode 100644 index 4871f328434e..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/DefaultFileOperations.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.os; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.PosixFilePermission; -import java.nio.file.attribute.PosixFilePermissions; -import java.util.Set; -import java.util.concurrent.Callable; -import org.graalvm.component.installer.FileOperations; - -/** - * - * @author sdedic - */ -public class DefaultFileOperations extends FileOperations { - - private static final Set ALL_WRITE_PERMS = PosixFilePermissions.fromString("rwxrwxrwx"); // NOI18N - - @Override - protected boolean doWithPermissions(Path p, Callable action) throws IOException { - Set restoreDirPermissions = null; - Files.setPosixFilePermissions(p, ALL_WRITE_PERMS); - Path d = p.normalize().getParent(); - // set the parent directory's permissions, but do not - // alter permissions outside the to-be-deleted tree: - if (d == null) { - throw new IOException("Cannot determine parent of " + p); - } - if (d.startsWith(rootPath()) && !d.equals(rootPath())) { - restoreDirPermissions = Files.getPosixFilePermissions(d); - try { - Files.setPosixFilePermissions(d, ALL_WRITE_PERMS); - } catch (IOException ex) { - // mask out, but report failure - return false; - } - } - boolean ok = false; - try { - action.call(); - ok = true; - } catch (IOException ex) { - throw ex; - } catch (Exception ex) { - ok = false; - } finally { - if (restoreDirPermissions != null) { - try { - Files.setPosixFilePermissions(d, restoreDirPermissions); - } catch (IOException ex2) { - // do not obscure the result with this exception - feedback().error("FILE_ErrorRestoringPermissions", ex2, p, ex2.getLocalizedMessage()); - ok = false; - } - } - - } - return ok; - } - - @Override - public void setPermissions(Path target, Set perms) throws IOException { - Files.setPosixFilePermissions(target, perms); - } - - @Override - public boolean flush() { - return false; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/WindowsFileOperations.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/WindowsFileOperations.java deleted file mode 100644 index 8b31d600f733..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/WindowsFileOperations.java +++ /dev/null @@ -1,262 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.os; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardCopyOption; -import java.nio.file.StandardOpenOption; -import java.nio.file.attribute.AclEntry; -import java.nio.file.attribute.AclEntryPermission; -import java.nio.file.attribute.AclEntryType; -import java.nio.file.attribute.AclFileAttributeView; -import java.nio.file.attribute.PosixFilePermission; -import java.nio.file.attribute.UserPrincipal; -import java.nio.file.attribute.UserPrincipalLookupService; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.NavigableSet; -import java.util.Set; -import java.util.TreeSet; -import java.util.concurrent.Callable; -import org.graalvm.component.installer.FileOperations; - -/** - * Windows-specific FileOperations, with delayed deletes and renames. {@link #setDelayDeletedList} - * and {@link #setCopyContents} must be used prior to working with files so the failed operations - * are recorded for the post-run batch processing. In SVM mode, these properties are unset, so any - * file operation failure will be reported immediately. - * - * @author sdedic - */ -public class WindowsFileOperations extends FileOperations { - /** - * File that contains list of delayed deletions. - */ - private Path delayDeletedList; - - /** - * File that contains move instructions. - */ - private Path copyContents; - - /** - * Paths which have been copied because of locked files. - */ - private Map copiedPaths = new HashMap<>(); - - /** - * Paths which should be deleted, but the operation must be delayed. - */ - private NavigableSet delayDeletedPaths = new TreeSet<>(); - - public void setDelayDeletedList(Path delayDeletedList) { - this.delayDeletedList = delayDeletedList; - } - - public void setCopyContents(Path copyContents) { - this.copyContents = copyContents; - } - - public Map getCopiedPaths() { - return copiedPaths; - } - - public Set getDelayDeletedPaths() { - return delayDeletedPaths; - } - - @Override - protected boolean doWithPermissions(Path p, Callable action) throws IOException { - AclFileAttributeView aclView = Files.getFileAttributeView(p, AclFileAttributeView.class); - UserPrincipalLookupService upls = p.getFileSystem().getUserPrincipalLookupService(); - String un = System.getProperty("user.name"); // NOI18N - UserPrincipal up; - List save; - - try { - up = upls.lookupPrincipalByName(un); - save = aclView.getAcl(); - - List temp = new ArrayList<>(save); - AclEntry en = AclEntry.newBuilder().setType(AclEntryType.ALLOW).setPrincipal(up).setPermissions(AclEntryPermission.DELETE).build(); - temp.add(en); - aclView.setAcl(temp); - } catch (IOException ex) { - // expected, bail out - return false; - } - - boolean ok = false; - try { - action.call(); - ok = true; - } catch (IOException ex) { - throw ex; - } catch (Exception ex) { - ok = false; - } finally { - try { - aclView.setAcl(save); - } catch (IOException ex) { - // do not obscure the result with this exception - feedback().error("FILE_ErrorRestoringPermissions", ex, p, ex.getLocalizedMessage()); - // expected, bail out - ok = false; - } - - } - return ok; - } - - @Override - public boolean flush() throws IOException { - boolean r = false; - if (copyContents != null) { - List lines = new ArrayList<>(copiedPaths.size()); - for (Map.Entry e : copiedPaths.entrySet()) { - Path orig = e.getKey(); - if (Files.exists(orig)) { - String s = orig.toAbsolutePath().toString() + "|" + e.getValue().toAbsolutePath().toString(); - lines.add(s); - // do not delete the directory's contents. - delayDeletedPaths.remove(orig); - } - } - if (!lines.isEmpty()) { - r = true; - } - Files.write(copyContents, lines, - StandardOpenOption.CREATE, - StandardOpenOption.WRITE, - StandardOpenOption.TRUNCATE_EXISTING); - } - if (delayDeletedList != null) { - List lines = new ArrayList<>(delayDeletedPaths.size()); - for (Path p : delayDeletedPaths) { - lines.add(p.toAbsolutePath().toString()); - } - if (!lines.isEmpty()) { - r = true; - } - Files.write(delayDeletedList, lines, - StandardOpenOption.CREATE, - StandardOpenOption.WRITE, - StandardOpenOption.TRUNCATE_EXISTING); - } - return r; - } - - @Override - protected void handleUndeletableFile(IOException ex, Path p) throws IOException { - if (delayDeletedList == null) { - super.handleUndeletableFile(ex, p); - return; - } - delayDeletedPaths.add(p); - feedback().output("FILE_CannotDeleteFileTryDelayed", p, ex.getLocalizedMessage()); - } - - @Override - protected Path handleUnmodifiableFile(IOException ex, Path p, InputStream content) throws IOException { - if (copyContents == null) { - return super.handleUnmodifiableFile(ex, p, content); - } - Path fn = p.getFileName(); - Path parentDir = p.getParent(); - assert parentDir != null; - assert fn != null; - Path pn = parentDir.getFileName(); - assert pn != null; - Path copy = parentDir.resolveSibling(pn.toString() + ".new"); - copiedPaths.put(parentDir, copy); - - feedback().output("FILE_CannotInstallFileTryDelayed", p, ex.getLocalizedMessage()); - - Files.createDirectories(copy); - Path target = copy.resolve(fn); - Files.copy(content, target, StandardCopyOption.REPLACE_EXISTING); - return target; - } - - /** - * Materializes the path. The input path is relative to the root; the path will be resolved - * against the root. Then, if copy-on-write was performed, the path will be redirected to a - * sibling directory. - * - * @param p the path to materialize - * - * @return the target path or {@code null} - */ - @Override - public Path materialize(Path p, boolean write) { - if (copyContents == null || delayDeletedList == null) { - return super.materialize(p, write); - } - Path parentDir = p.getParent(); - Path copy = copiedPaths.get(parentDir); - Path fn = p.getFileName(); - assert fn != null; - assert parentDir != null; - if (copy != null) { - Path r = copy.resolve(fn); - return r; - } - if (delayDeletedPaths.contains(p)) { - if (write) { - Path pn = parentDir.getFileName(); - assert pn != null; - copy = parentDir.resolveSibling(pn.toString() + ".new"); - copiedPaths.put(parentDir, copy); - return copy.resolve(fn); - } else { - // the file was deleted. - return null; - } - } - return p; - } - - @Override - public void setPermissions(Path target, Set perms) throws IOException { - // ignore permissions on Windows. - } - - @Override - protected void performDelete(Path p) throws IOException { - // check if something inside the subtree was scheduled for delay-delete. - // If so, then schedule also the parent: - Path next = delayDeletedPaths.ceiling(p); - if (next != null && next.startsWith(p)) { - feedback().output("FILE_CannotDeleteParentTryDelayed", p); - } else { - super.performDelete(p); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/WindowsJVMWrapper.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/WindowsJVMWrapper.java deleted file mode 100644 index 179dc16230f5..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/os/WindowsJVMWrapper.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.os; - -import java.io.IOException; -import java.io.UncheckedIOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import java.util.Map; -import java.util.stream.Stream; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileOperations; -import org.graalvm.component.installer.SystemUtils; - -/** - * - * @author sdedic - */ -public class WindowsJVMWrapper { - private final Feedback fb; - private final FileOperations fileOps; - private final Path installPath; - - private String mainClass; - private String jvmBinary; - private List args = Collections.emptyList(); - private List jvmArgs = Collections.emptyList(); - private String classpath = "."; // NOI18N - - public WindowsJVMWrapper(Feedback fb, FileOperations fops, Path installPath) { - this.fb = fb.withBundle(WindowsJVMWrapper.class); - this.fileOps = fops; - this.installPath = installPath; - } - - public WindowsJVMWrapper vm(String path, List vmArgs) { - jvmBinary = path; - jvmArgs = vmArgs; - return this; - } - - public WindowsJVMWrapper mainClass(String mc) { - this.mainClass = mc; - return this; - } - - public WindowsJVMWrapper classpath(String cp) { - this.classpath = cp; - return this; - } - - public WindowsJVMWrapper args(List a) { - this.args = a; - return this; - } - - public int execute() throws IOException { - assert mainClass != null; - assert jvmBinary != null; - - Path copyPath = Files.createTempFile("gu_copy_", ".lst"); // NOI18N - Path deletePath = Files.createTempFile("gu_delete", ".lst"); // NOI18N - copyPath.toFile().deleteOnExit(); - deletePath.toFile().deleteOnExit(); - - ProcessBuilder builder = new ProcessBuilder(); - Map env = builder.environment(); - env.put(CommonConstants.ENV_COPY_CONTENTS, copyPath.toAbsolutePath().toString()); - env.put(CommonConstants.ENV_DELETE_LIST, deletePath.toAbsolutePath().toString()); - - List all = new ArrayList<>(jvmArgs.size() + args.size() + 1); - all.add(jvmBinary); - if (classpath != null) { - all.add("-classpath"); // NOI18N - all.add(classpath); - } - all.addAll(jvmArgs); - all.add(mainClass); - all.addAll(args); - - Process proc = builder.command(all).inheritIO().start(); - - try { - proc.waitFor(); - } catch (InterruptedException ex) { - } - int exitValue = proc.exitValue(); - if (exitValue != CommonConstants.WINDOWS_RETCODE_DELAYED_OPERATION) { - return exitValue; - } - deleteRecursively(deletePath); - copyContents(copyPath); - return 0; - } - - void copyContents(Path listFile) throws IOException { - boolean first = true; - for (String desc : Files.readAllLines(listFile)) { - int i = desc.indexOf('|'); - if (i == -1) { - continue; - } - Path p = SystemUtils.fromUserString(desc.substring(0, i)); - Path q = SystemUtils.fromUserString(desc.substring(i + 1)); - if (first) { - fb.message("MSG_CopyNewFiles"); - first = false; - } - SystemUtils.copySubtree(q, p); - try { - deleteFileRecursively(q); - } catch (IOException ex) { - fb.error("ERR_CannotDeletePath", ex, p, ex.getMessage()); - } - } - } - - void deleteRecursively(Path listFile) throws IOException { - boolean first = true; - for (String fn : Files.readAllLines(listFile)) { - if (first) { - fb.message("MSG_DeleteObsoleteFiles"); - first = false; - } - Path p = SystemUtils.fromUserString(fn); - try { - deleteFileRecursively(p); - } catch (IOException ex) { - fb.error("ERR_CannotDeletePath", ex, p, ex.getMessage()); - } - } - } - - /** - * Also called from Uninstaller. - * - * @param rootPath root path to delete (inclusive) - * @throws IOException if the deletion fails. - */ - void deleteFileRecursively(Path rootPath) throws IOException { - try (Stream paths = Files.walk(rootPath)) { - paths.sorted(Comparator.reverseOrder()).forEach((p) -> { - if (!p.toAbsolutePath().startsWith(installPath)) { - return; - } - try { - fileOps.deleteFile(p); - } catch (IOException ex) { - throw new UncheckedIOException(ex); - } - }); - } catch (UncheckedIOException ex) { - throw ex.getCause(); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/AbstractCatalogStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/AbstractCatalogStorage.java deleted file mode 100644 index eab262f75f2f..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/AbstractCatalogStorage.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -package org.graalvm.component.installer.persist; - -import java.io.IOException; -import java.net.URL; -import java.util.Map; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.MetadataException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.ComponentStorage; - -/** - * Base for different storage of remote component list. The default implementation uses properties - * resource reachable through the https. - * - * @author sdedic - */ -public abstract class AbstractCatalogStorage implements ComponentStorage { - protected final ComponentRegistry localRegistry; - protected final Feedback feedback; - protected final URL baseURL; - - public AbstractCatalogStorage(ComponentRegistry localRegistry, Feedback feedback, URL baseURL) { - this.localRegistry = localRegistry; - this.feedback = feedback; - this.baseURL = baseURL; - } - - @Override - public Map loadGraalVersionInfo() { - return localRegistry.getGraalCapabilities(); - } - - @Override - public ComponentInfo loadComponentFiles(ComponentInfo ci) throws IOException { - // files are not supported, yet - return ci; - } - - protected byte[] toHashBytes(String comp, String hashS) { - try { - return SystemUtils.toHashBytes(hashS); - } catch (IllegalArgumentException ex) { - throw new MetadataException(null, feedback.l10n("REMOTE_InvalidHash", comp, ex.getMessage())); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/Bundle.properties deleted file mode 100644 index 1710acd63dd7..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/Bundle.properties +++ /dev/null @@ -1,55 +0,0 @@ -ERROR_HeaderMissing=Required header is missing: {0} -ERROR_HeaderInvalid=Header {0} value is invalid: {1} -ERROR_MissingSymbolicName=Missing symbolic name -ERROR_InvalidSymbolicName=Invalid symbolic name -ERROR_ParametersUnsupported=Parameters are not supported -ERROR_InvalidVersion=Invalid version -ERROR_InvalidCapabilityName=Invalid capability name -ERROR_MissingCapabilityName=Missing capability name -# {0} - Directive or parameter name -ERROR_MissingArgument=Argument missing for directive or parameter {0} -# {0} - parameter name -ERROR_InvalidParameterSyntax=Invalid syntax for parameter or directive {0} -ERROR_InvalidQuotedString=Invalid quoted string -# {0} - parameter name -ERROR_MissingArgument=Missing argument for parameter or directive {0} -ERROR_InvalidVersion=Invalid version format -ERROR_InvalidParameterName=Invalid parameter or directive name -ERROR_UnsupportedParameters=Unsupported parameters found. -ERROR_UnsupportedDirectives=Unsupported directives found. -ERROR_MissingVersionFilter=Missing version filter -ERROR_InvalidFilterSpecification=Invalid filter specification -ERROR_UnknownCapability=Unsupported capability namespace -ERROR_UnsupportedFilterOperation=Unsupported operation in filter. Only = is supported. -ERROR_DuplicateFilterAttribute=Duplicate Filter Attribute - -ERROR_PermissionFormat=Invalid file permissions format -ERROR_BrokenSymlink=Symbolic link {0} is broken -ERROR_CircularSymlink=Symbolic link {0} forms a circular reference. -ERROR_CorruptedPackageMissingMeta=The package is corrupted, internal metadata is missing. -ERROR_UnsupportedCapabilityType=Unsupported type for capability {0}: {1} -ERROR_InvalidCapabilityVersion=Invalid version of capability {0}: {1} -ERROR_InvalidCapabilitySyntax=Invalid capability syntax -ERR_CannotReadAcceptance=Cannot read license acceptance info for {0}. -ERROR_DependencyParametersNotSupported=Parameters not supported for dependencies. - -ERR_DirectoryURLInvalid=Invalid or unreadable location on file system: {0}. The location will be ignored. - -# {0} - filename -# {1} - error message -ERR_DirectoryComponentMetadata=Component file {0} contains invalid or corrupted metadata, or is not a component: {1}. The file will be ignored. -ERR_DirectoryComponentError=Error loading component file {0}: {1}. The file will be ignored. - -DIR_LocalFile=Local file - -# {0} component distribution type -ERROR_InvalidDistributionType=Component {1}: invalid distribution type {0} - -# {0} license path -ERROR_CannotComputeLicenseID=Could not compute ID for license at {0}. - -# {0} the error message. -WARNING_CouldNotLoadPlugin=WARNING: could not load or initialize an extension: {0} - -LICENSE_RemoteLicenseDescription=Downloading license: {0} -ERROR_DownloadLicense=Could not download license {0}: {1} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/ComponentPackageLoader.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/ComponentPackageLoader.java deleted file mode 100644 index 61256fde7130..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/ComponentPackageLoader.java +++ /dev/null @@ -1,504 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.BufferedReader; -import org.graalvm.component.installer.MetadataException; -import org.graalvm.component.installer.InstallerStopException; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.io.StringWriter; -import java.net.URL; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.attribute.PosixFilePermissions; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Properties; -import java.util.ResourceBundle; -import java.util.Set; -import java.util.function.Function; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.DistributionType; -import org.graalvm.component.installer.remote.FileDownloader; - -/** - * Loads information from the component's bundle. - */ -public class ComponentPackageLoader implements Closeable, MetadataLoader { - protected final Feedback feedback; - - /** - * Default value producer. - */ - private final Function valueSupplier; - - /** - * Do not throw exceptions eagerly. - */ - private boolean infoOnly; - - /** - * List of errors encountered when reading metadata. Filled only if {@link #infoOnly} = - * {@code true}. - */ - private final List errors = new ArrayList<>(); - private final List fileList = new ArrayList<>(); - - /** - * Component ID; temporary. - */ - private String id; - private String version; - private String name; - - /** - * Path for the LICENSE file; adjusted with version etc. - */ - private String licensePath; - - /** - * Type / name of the license. - */ - private String licenseType; - - /** - * The produced component info. - */ - private ComponentInfo info; - - /** - * If true, will not verify symbolic links. - * - * Default false = verify on. - */ - private boolean noVerifySymlinks; - - private final String componentTag; - - private final Properties props = new Properties(); - - static final ResourceBundle BUNDLE = ResourceBundle.getBundle("org.graalvm.component.installer.persist.Bundle"); - - public ComponentPackageLoader(String tag, Function supplier, Feedback feedback) { - this.feedback = feedback.withBundle(ComponentPackageLoader.class); - this.valueSupplier = supplier; - this.componentTag = tag; - } - - public ComponentPackageLoader(Function supplier, Feedback feedback) { - this(null, supplier, feedback); - } - - @Override - public Archive getArchive() { - return null; - } - - private String value(String key) { - String v = valueSupplier.apply(key); - if (v != null && (componentTag == null || componentTag.isEmpty())) { - props.put(key, v); - } - return v; - } - - @Override - public ComponentPackageLoader infoOnly(boolean only) { - this.infoOnly = only; - return this; - } - - private HeaderParser parseHeader(String header) throws MetadataException { - return parseHeader2(header, null); - } - - private HeaderParser parseHeader2(String header, Function fn) throws MetadataException { - String s = value(header); - if (fn != null) { - s = fn.apply(s); - } - return new HeaderParser(header, s, feedback).mustExist(); - } - - private HeaderParser parseHeader(String header, String defValue) throws MetadataException { - String s = value(header); - if (s == null) { - if (defValue == null) { - return new HeaderParser(header, s, feedback); - } else { - return new HeaderParser(header, defValue, feedback); - } - } - return new HeaderParser(header, s, feedback).mustExist(); - } - - @Override - public ComponentInfo getComponentInfo() { - if (info == null) { - return createComponentInfo(); - } - return info; - } - - private void parse(Runnable... parts) { - for (Runnable r : parts) { - try { - r.run(); - } catch (MetadataException ex) { - if (BundleConstants.BUNDLE_ID.equals(ex.getOffendingHeader())) { - throw ex; - } - if (infoOnly) { - errors.add(ex); - } else { - throw ex; - } - } catch (InstallerStopException ex) { - if (infoOnly) { - errors.add(ex); - } else { - throw ex; - } - } - } - } - - @Override - public List getErrors() { - return errors; - } - - /** - * Computes some component hash/tag. Computes a digest from each read/present value in the - * manifest. - */ - private void supplyComponentTag() { - String ct = info.getTag(); - if (ct != null && !ct.isEmpty()) { - return; - } - try (StringWriter wr = new StringWriter()) { - props.store(wr, ""); // NOI18N - info.setTag(SystemUtils.digestString(wr.toString().replaceAll("#.*\r?\n\r?", ""), false)); // NOI18N - } catch (IOException ex) { - throw new FailedOperationException(ex.getLocalizedMessage(), ex); - } - } - - private void loadWorkingDirectories(ComponentInfo nfo) { - String val = parseHeader(BundleConstants.BUNDLE_WORKDIRS, null).getContents(""); - Set workDirs = new LinkedHashSet<>(); - for (String s : val.split(":")) { // NOI18N - String p = s.trim(); - if (!p.isEmpty()) { - workDirs.add(p); - } - } - nfo.addWorkingDirectories(workDirs); - } - - private String findComponentTag() { - String t = value(BundleConstants.BUNDLE_SERIAL); - return t != null && !t.isEmpty() ? t : componentTag; - } - - protected ComponentInfo createBaseComponentInfo() { - parse( - () -> id = parseHeader(BundleConstants.BUNDLE_ID).parseSymbolicName(), - () -> name = parseHeader(BundleConstants.BUNDLE_NAME).getContents(id), - () -> version = parseHeader(BundleConstants.BUNDLE_VERSION).version(), - () -> { - info = new ComponentInfo(id, name, version, findComponentTag()); - info.addRequiredValues(parseHeader(BundleConstants.BUNDLE_REQUIRED).parseRequiredCapabilities()); - info.addProvidedValues(parseHeader(BundleConstants.BUNDLE_PROVIDED, "").parseProvidedCapabilities()); - info.setDependencies(parseHeader(BundleConstants.BUNDLE_DEPENDENCY, "").parseDependencies()); - info.setStability( - // use the new header, fall back on the old one. Default - // to "". - parseHeader(BundleConstants.BUNDLE_STABILITY2, value(BundleConstants.BUNDLE_STABILITY)).parseStability()); - }); - supplyComponentTag(); - return info; - } - - protected ComponentInfo loadExtendedMetadata(ComponentInfo base) { - parse( - () -> base.setDistributionType(parseDistributionType()), - () -> loadWorkingDirectories(base), - () -> loadMessages(base), - () -> loadLicenseType(base)); - return base; - } - - public ComponentInfo createComponentInfo() { - ComponentInfo nfo = createBaseComponentInfo(); - return loadExtendedMetadata(nfo); - } - - private DistributionType parseDistributionType() { - String dtString = parseHeader(BundleConstants.BUNDLE_COMPONENT_DISTRIBUTION, null).getContents(DistributionType.OPTIONAL.name()); - try { - return DistributionType.valueOf(dtString.toUpperCase(Locale.ENGLISH)); - } catch (IllegalArgumentException ex) { - // do not report the exception, just notice in verbose mode: - feedback.verboseOutput("ERROR_InvalidDistributionType", id, dtString); - return DistributionType.OPTIONAL; - } - } - - private void loadLicenseType(ComponentInfo nfo) { - licenseType = parseHeader(BundleConstants.BUNDLE_LICENSE_TYPE, null).getContents(null); - nfo.setLicenseType(licenseType); - if (licenseType != null) { - licensePath = parseHeader(BundleConstants.BUNDLE_LICENSE_PATH).mustExist().getContents(null); - nfo.setLicensePath(licensePath); - } - } - - @Override - public String getLicensePath() { - if (info != null) { - return info.getLicensePath(); - } - return licensePath; - } - - protected FileDownloader createFileDownloader(URL remote, String desc) { - return new FileDownloader(desc, remote, feedback); - } - - public String downloadAndHashLicense(String remote) { - String desc = getLicenseType(); - if (desc == null) { - desc = remote; - } - try { - URL u = SystemUtils.toURL(remote); - FileDownloader dn = createFileDownloader(u, feedback.l10n("LICENSE_RemoteLicenseDescription", desc)); - dn.download(); - String s = String.join("\n", Files.readAllLines(dn.getLocalFile().toPath())); - return SystemUtils.digestString(s, false) /* + "_" + remote */; - } catch (IOException ex) { - throw feedback.failure("ERROR_DownloadLicense", ex, desc, ex.getLocalizedMessage()); - } - } - - /** - * License digest or URL. - */ - private String cachedLicenseID; - - @Override - public String getLicenseID() { - if (cachedLicenseID != null) { - return cachedLicenseID; - } - String licPath = getLicensePath(); - if (licPath == null) { - return null; - } else if (SystemUtils.isRemotePath(licPath)) { // NOI18N - return cachedLicenseID = downloadAndHashLicense(licPath); - } - Archive.FileEntry foundEntry = null; - - for (Archive.FileEntry fe : getArchive()) { - if (getLicensePath().equals(fe.getName())) { - foundEntry = fe; - break; - } - } - if (foundEntry == null) { - throw feedback.failure("ERROR_CannotComputeLicenseID", null, licPath); - } - - ByteBuffer bb = ByteBuffer.allocate(Integer.getInteger("org.graalvm.component.installer.fileReadBuffer", 4096)); - MessageDigest dg; - String licId; - - try { - dg = MessageDigest.getInstance("SHA-256"); // NOI18N - } catch (NoSuchAlgorithmException ex) { - throw feedback.failure("ERROR_CannotComputeLicenseID", ex, foundEntry.getName()); - } - try (InputStream is = getArchive().getInputStream(foundEntry); - ReadableByteChannel rch = Channels.newChannel(is)) { - while (true) { - int read = rch.read(bb); - if (read < 0) { - break; - } - bb.flip(); - dg.update(bb); - bb.clear(); - } - licId = SystemUtils.fingerPrint(dg.digest(), false); - } catch (IOException ex) { - throw feedback.failure("ERROR_CannotComputeLicenseID", ex, foundEntry.getName()); - } - return cachedLicenseID = licId; - } - - @Override - public String getLicenseType() { - return licenseType; - } - - private void throwInvalidPermissions() { - throw feedback.failure("ERROR_PermissionFormat", null); - } - - @SuppressWarnings("unchecked") - protected Map parsePermissions(BufferedReader r) throws IOException { - Map result = new LinkedHashMap<>(); - - Properties prop = new Properties(); - prop.load(r); - - List paths = new ArrayList<>((Collection) Collections.list(prop.propertyNames())); - Collections.sort(paths); - - for (String k : paths) { - SystemUtils.fromCommonRelative(k); - String v = prop.getProperty(k, "").trim(); // NOI18N - if (!v.isEmpty()) { - try { - PosixFilePermissions.fromString(v); - } catch (IllegalArgumentException ex) { - throwInvalidPermissions(); - } - } - result.put(k, v); - } - return result; - } - - @Override - public Map loadPermissions() throws IOException { - return Collections.emptyMap(); - } - - @SuppressWarnings({"rawtypes", "unchecked"}) - protected Map parseSymlinks(Properties links) { - for (String key : new HashSet<>(links.stringPropertyNames())) { - Path p = SystemUtils.fromCommonRelative(key).normalize(); - String prop = (String) links.remove(key); - links.setProperty(SystemUtils.toCommonPath(p), prop); - } - if (noVerifySymlinks) { - return new HashMap(links); - } - // check the links - for (String s : Collections.list((Enumeration) links.propertyNames())) { - String l = s; - Set seen = new HashSet<>(); - while (l != null) { - if (!seen.add(l)) { - throw feedback.failure("ERROR_CircularSymlink", null, l); - } - String target = links.getProperty(l); - Path linkPath = SystemUtils.fromCommonRelative(l); - SystemUtils.checkCommonRelative(linkPath, target); - Path targetPath = linkPath.resolveSibling(target).normalize(); - String targetString = SystemUtils.toCommonPath(targetPath); - if (fileList.contains(targetString)) { - break; - } - String lt = links.getProperty(targetString); - if (lt == null) { - throw feedback.failure("ERROR_BrokenSymlink", null, target); - } - l = targetString; - } - } - return new HashMap(links); - } - - @Override - public Map loadSymlinks() throws IOException { - return Collections.emptyMap(); - } - - @Override - public void loadPaths() { - getComponentInfo(); - } - - @Override - public boolean isNoVerifySymlinks() { - return noVerifySymlinks; - } - - @Override - public void setNoVerifySymlinks(boolean noVerifySymlinks) { - this.noVerifySymlinks = noVerifySymlinks; - } - - @Override - public void close() throws IOException { - } - - private void loadMessages(ComponentInfo nfo) { - String val = parseHeader(BundleConstants.BUNDLE_MESSAGE_POSTINST, null).getContents(null); - if (val != null) { - String text = val.replace("\\n", "\n").replace("\\\\", "\\"); // NOI18N - nfo.setPostinstMessage(text); - } - } - - protected void setLicensePath(String path) { - this.licensePath = path; - getComponentInfo().setLicensePath(licensePath); - } - - protected void addFiles(List files) { - fileList.addAll(files); - } - - @Override - public ComponentInfo completeMetadata() throws IOException { - return getComponentInfo(); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryCatalogProvider.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryCatalogProvider.java deleted file mode 100644 index a6f75c8fcf5a..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryCatalogProvider.java +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.channels.FileChannel; -import java.nio.channels.ReadableByteChannel; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardOpenOption; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.ServiceLoader; -import java.util.Set; -import org.graalvm.component.installer.ComponentArchiveReader; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.MetadataException; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentStorage; -import org.graalvm.component.installer.remote.FileDownloader; - -/** - * Implements ComponentStorage over a local directory. It assumes that the directory contains JAR - * (or simply recognized formats) Components and turns them into a Storage. - *

- * It is then used as a part of {@link org.graalvm.component.installer.remote.MergeStorage} to - * provide source for a potential dependency of an installed Component. - *

- * This local storages should be added last, so that 'official' distributions win. - * - * @author sdedic - */ -public class DirectoryCatalogProvider implements ComponentStorage, SoftwareChannel { - private final Path directory; - private final Feedback feedback; - private boolean verifyJars = true; - private boolean reportErrors = true; - - /** - * Map componentID -> ComponentInfo. Lazy populated from {@link #initComponents()}. - */ - private Map> dirContents = null; - - public DirectoryCatalogProvider(Path directory, Feedback feedback) { - this.directory = directory; - this.feedback = feedback.withBundle(DirectoryCatalogProvider.class); - } - - public boolean isReportErrors() { - return reportErrors; - } - - public void setReportErrors(boolean reportErrors) { - this.reportErrors = reportErrors; - } - - public void setVerifyJars(boolean verifyJars) { - this.verifyJars = verifyJars; - } - - @Override - public Set listComponentIDs() throws IOException { - initComponents(); - return dirContents.keySet(); - } - - @Override - public ComponentInfo loadComponentFiles(ComponentInfo ci) throws IOException { - return ci; - } - - @Override - public Set loadComponentMetadata(String id) throws IOException { - initComponents(); - return dirContents.get(id); - } - - @Override - public Map loadGraalVersionInfo() { - initComponents(); - throw new UnsupportedOperationException("Not supported yet."); // To change body of - // generated methods, choose - // Tools | Templates. - } - - private void initComponents() { - if (dirContents != null) { - return; - } - - dirContents = new HashMap<>(); - if (!Files.isDirectory(directory)) { - return; - } - try { - Files.list(directory).forEach((p -> { - try { - ComponentInfo info = maybeCreateComponent(p); - if (info != null) { - dirContents.computeIfAbsent(info.getId(), (id) -> new HashSet<>()).add(info); - } - } catch (MetadataException ex) { - if (reportErrors) { - feedback.error("ERR_DirectoryComponentMetadata", ex, p.toString(), ex.getLocalizedMessage()); - } - } catch (IOException | FailedOperationException ex) { - if (reportErrors) { - feedback.error("ERR_DirectoryComponentError", ex, p.toString(), ex.getLocalizedMessage()); - } - } - })); - } catch (IOException ex) { - // report error, produce an empty - } - } - - private ComponentInfo maybeCreateComponent(Path localFile) throws IOException { - byte[] fileStart = null; - String serial; - - if (Files.isRegularFile(localFile)) { - try (ReadableByteChannel ch = FileChannel.open(localFile, StandardOpenOption.READ)) { - ByteBuffer bb = ByteBuffer.allocate(8); - ch.read(bb); - fileStart = bb.array(); - } - serial = SystemUtils.fingerPrint(SystemUtils.computeFileDigest(localFile, null)); - } else { - fileStart = new byte[]{0, 0, 0, 0, 0, 0, 0, 0}; - serial = SystemUtils.digestString(localFile.toString(), false); - } - MetadataLoader ldr = null; - try { - for (ComponentArchiveReader provider : ServiceLoader.load(ComponentArchiveReader.class)) { - ldr = provider.createLoader(localFile, fileStart, serial, feedback, verifyJars); - if (ldr != null) { - ComponentInfo info = ldr.getComponentInfo(); - info.setRemoteURL(localFile.toUri().toURL()); - info.setOrigin(feedback.l10n("DIR_LocalFile")); - return info; - } - } - } finally { - // ignore, may be not a component... - if (ldr != null) { - ldr.close(); - } - } - return null; - } - - @Override - public ComponentStorage getStorage() throws IOException { - return this; - } - - @Override - public FileDownloader configureDownloader(ComponentInfo info, FileDownloader dn) { - return dn; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryChannelFactory.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryChannelFactory.java deleted file mode 100644 index 25c504f1da65..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryChannelFactory.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.File; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.file.Files; -import java.nio.file.Path; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; - -/** - * Creates {@link DirectoryCatalogProvider}s over a directory. - * - * @author sdedic - */ -public class DirectoryChannelFactory implements SoftwareChannel.Factory { - @Override - public SoftwareChannel createChannel(SoftwareChannelSource source, CommandInput input, Feedback output) { - String u = source.getLocationURL(); - if (!u.startsWith("file:")) { // NOI18N - return null; - } - Feedback out2 = output.withBundle(DirectoryChannelFactory.class); - try { - Path p = new File(new URI(u)).toPath(); - if (!Files.isDirectory(p)) { - return null; - } - DirectoryCatalogProvider dp = new DirectoryCatalogProvider(p, out2); - dp.setVerifyJars(input.optValue(Commands.OPTION_NO_VERIFY_JARS) == null); - // do not report errors for directory sources implied by commandline arguments. - if (Boolean.FALSE.toString().equals(source.getParameter("reportErrors"))) { // NOI18N - dp.setReportErrors(false); - } - return dp; - } catch (URISyntaxException ex) { - out2.error("ERR_DirectoryURLInvalid", ex, u, ex.getMessage()); - return null; - } - } - - @Override - public void init(CommandInput input, Feedback output) { - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryStorage.java deleted file mode 100644 index 6d732b1db2d4..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/DirectoryStorage.java +++ /dev/null @@ -1,819 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.File; -import java.io.FileFilter; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.StringWriter; -import java.io.UncheckedIOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.StandardOpenOption; -import java.text.MessageFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Date; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Properties; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.Config; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.MetadataException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.DistributionType; -import org.graalvm.component.installer.model.ManagementStorage; -import org.graalvm.component.installer.model.StabilityLevel; - -/** - * Directory-based implementation of component storage. - */ -public class DirectoryStorage implements ManagementStorage { - public static final String META_LICENSE_FILE = "LICENSE_PATH"; // NOI18N - - /** - * Relative fileName for the "release" Graalvm metadata. - */ - private static final String PATH_RELEASE_FILE = "release"; - - /** - * Suffix for the component metadata files, including comma. - */ - private static final String COMPONENT_FILE_SUFFIX = ".component"; // NOI18N - - /** - * Metadata for natively installed component. - */ - private static final String NATIVE_COMPONENT_FILE_SUFFIX = ".meta"; // NOI18N - - /** - * Suffix for the filelist metadata files. - */ - private static final String LIST_FILE_SUFFIX = ".filelist"; // NOI18N - - /** - * The "replaced files" metadata fileName relative to the registry. - */ - private static final String PATH_REPLACED_FILES = "replaced-files.properties"; // NOI18N - - /** - * - * Template for license accepted records. - */ - private static final String LICENSE_DIR = "licenses"; // NOI18N' - - /** - * Template for license accepted records. - */ - private static final String LICENSE_CONTENTS_NAME = LICENSE_DIR + "/{0}"; // NOI18N' - - /** - * Template for license accepted records. - */ - private static final String LICENSE_CONTENTS_ID = LICENSE_DIR + "/{0}.id"; // NOI18N' - - /** - * - * Template for license accepted records. - */ - static final String LICENSE_FILE_TEMPLATE = LICENSE_DIR + "/{0}.accepted/_all"; // NOI18N' - - /** - * - */ - private static final String BUNDLE_REQUIRED_PREFIX = BundleConstants.BUNDLE_REQUIRED + "-"; // NOI18N - private static final String BUNDLE_PROVIDED_PREFIX = BundleConstants.BUNDLE_PROVIDED + "-"; // NOI18N - - /** - * Root of the storage fileName. - */ - protected final Path registryPath; - - /** - * GralVM installation home. - */ - protected final Path graalHomePath; - - /** - * The environment for reporting errors etc. - */ - private final Feedback feedback; - - private Properties loaded; - - private ComponentInfo graalCore; - - private static final String GRAALVM_SOURCE = "source"; // NOI18N - private static final Pattern SOURCE_REVISION = Pattern.compile("\\b([a-z-._]+):([0-9a-f]+)\\b"); // NOI18N - private static final String REVISION_PREFIX = "source_"; // NOI18N - - private static final String[] REQUIRED_ATTRIBUTES = { - CommonConstants.CAP_GRAALVM_VERSION, - CommonConstants.CAP_OS_NAME, - CommonConstants.CAP_OS_ARCH - }; - - private static final String ENTERPRISE_EDITION = "ee"; // NOI18N - private static final String VM_ENTERPRISE_COMPONENT = "vm-enterprise:"; // NOI18N - - private String javaVersion; - private Config config; - - public DirectoryStorage(Feedback feedback, Path storagePath, Path graalHomePath) { - this.feedback = feedback; - this.registryPath = storagePath; - this.graalHomePath = graalHomePath; - this.javaVersion = "" + SystemUtils.getJavaMajorVersion(); // NOI18N - } - - public Config getConfig() { - return config; - } - - public void setConfig(Config config) { - this.config = config; - } - - public String getJavaVersion() { - return javaVersion; - } - - public void setJavaVersion(String javaVersion) { - this.javaVersion = javaVersion; - } - - @Override - public Map loadGraalVersionInfo() { - Path graalVersionFile = graalHomePath.resolve(SystemUtils.fromCommonString(PATH_RELEASE_FILE)); - try (InputStream istm = Files.newInputStream(graalVersionFile)) { // NOI18N - return load(istm); - } catch (IOException ex) { - throw feedback.failure("ERROR_ReadingRealeaseFile", ex, graalVersionFile, ex.getMessage()); - } - } - - public Version getGraalVMVersion() { - String s = loadGraalVersionInfo().get(CommonConstants.CAP_GRAALVM_VERSION); - return Version.fromString(s); - } - - @SuppressWarnings("unchecked") - private Map load(InputStream istm) throws IOException { - Map graalAttributes = new HashMap<>(); - Properties props = new Properties(); - props.load(istm); - String srcText = null; - for (String key : Collections.list((Enumeration) props.propertyNames())) { - String val = props.getProperty(key, ""); // MOI18N - - String lowerKey = key.toLowerCase(Locale.ENGLISH); - if (!val.isEmpty() && val.charAt(0) == '"' && val.length() > 1 && val.charAt(val.length() - 1) == '"') { // MOI18N - val = val.substring(1, val.length() - 1).trim(); - } - if (GRAALVM_SOURCE.equals(lowerKey)) { - Matcher m = SOURCE_REVISION.matcher(val); - srcText = val; - while (m.find()) { - if (m.group(1) == null || m.group(2) == null || m.group(1).isEmpty() || m.group(2).isEmpty()) { - throw feedback.failure("ERROR_ReleaseSourceRevisions", null, graalHomePath); - } - graalAttributes.put(REVISION_PREFIX + m.group(1), m.group(2)); - } - } else { - graalAttributes.put(lowerKey, val); - } - } - for (String a : REQUIRED_ATTRIBUTES) { - if (!graalAttributes.containsKey(a)) { - throw feedback.failure("STORAGE_InvalidReleaseFile", null); - } - } - if (graalAttributes.get(CommonConstants.CAP_EDITION) == null && srcText != null) { - // Hardcoded, sorry ... - if (srcText.contains(VM_ENTERPRISE_COMPONENT)) { - graalAttributes.put(CommonConstants.CAP_EDITION, ENTERPRISE_EDITION); // NOI18N - } else { - graalAttributes.put(CommonConstants.CAP_EDITION, CommonConstants.EDITION_CE); - } - } - graalAttributes.putIfAbsent(CommonConstants.CAP_JAVA_VERSION, javaVersion); - return graalAttributes; - } - - /** - * Loads list of components. - * - * @return component IDs - * @throws IOException - */ - @Override - public Set listComponentIDs() throws IOException { - if (!Files.exists(registryPath)) { - return Collections.emptySet(); - } - File d = registryPath.toFile(); - File[] files = d.listFiles(new FileFilter() { - @Override - public boolean accept(File child) { - if (!Files.isRegularFile(child.toPath())) { - return false; - } - return child.getName().endsWith(COMPONENT_FILE_SUFFIX) || - child.getName().endsWith(NATIVE_COMPONENT_FILE_SUFFIX); - } - }); - if (files != null) { - Set result = new HashSet<>(); - for (File f : files) { - String s = registryPath.relativize(f.toPath()).toString(); - int lastDot = s.lastIndexOf('.'); - result.add(s.substring(0, lastDot)); - } - // GraalVM core is always present - if (Files.exists(graalHomePath.resolve("bin"))) { - result.add(BundleConstants.GRAAL_COMPONENT_ID); - } - return result; - } else { - throw new IllegalArgumentException("File listing of " + d + " returned null."); - } - } - - private static String computeTag(Properties data) throws IOException { - try (StringWriter wr = new StringWriter()) { - data.store(wr, ""); - // properties store date/time into the stream as a comment. Cannot be disabled - // programmatically, - // must filter out. - return SystemUtils.digestString(wr.toString().replaceAll("#.*\r?\n\r?", ""), false); // NOI18N - } - } - - ComponentInfo loadMetadataFrom(InputStream fileStream) throws IOException { - loaded = new Properties(); - loaded.load(fileStream); - - String serial = loaded.getProperty(BundleConstants.BUNDLE_SERIAL); - if (serial == null) { - serial = computeTag(loaded); - } - String id = getRequiredProperty(BundleConstants.BUNDLE_ID); - String name = getRequiredProperty(BundleConstants.BUNDLE_NAME); - String version = getRequiredProperty(BundleConstants.BUNDLE_VERSION); - - return propertiesToMeta(loaded, new ComponentInfo(id, name, version, serial), feedback); - } - - public static ComponentInfo propertiesToMeta(Properties loaded, ComponentInfo ci, Feedback fb) { - String stability = loaded.getProperty(BundleConstants.BUNDLE_STABILITY2, loaded.getProperty(BundleConstants.BUNDLE_STABILITY)); - if (stability != null) { - ci.setStability(StabilityLevel.valueOfMixedCase(stability)); - } - String license = loaded.getProperty(BundleConstants.BUNDLE_LICENSE_PATH); - if (license != null) { - SystemUtils.checkCommonRelative(null, license); - ci.setLicensePath(license); - } - for (String s : loaded.stringPropertyNames()) { - if (s.startsWith(BUNDLE_REQUIRED_PREFIX)) { - String k = s.substring(BUNDLE_REQUIRED_PREFIX.length()); - String v = loaded.getProperty(s, ""); // NOI18N - ci.addRequiredValue(k, v); - } - if (s.startsWith(BUNDLE_PROVIDED_PREFIX)) { - String k = s.substring(BUNDLE_PROVIDED_PREFIX.length()); - String v = loaded.getProperty(s, ""); // NOI18N - if (v.length() < 2) { - continue; - } - String val = v.substring(1); - Object o; - switch (v.charAt(0)) { - case 'V': - o = Version.fromString(val); - break; - case '"': - o = val; - break; - default: - continue; - } - ci.provideValue(k, o); - } - } - Set deps = new LinkedHashSet<>(); - for (String s : loaded.getProperty(BundleConstants.BUNDLE_DEPENDENCY, "").split(",")) { - String p = s.trim(); - if (!p.isEmpty()) { - deps.add(s.trim()); - } - } - if (!deps.isEmpty()) { - ci.setDependencies(deps); - } - List ll = new ArrayList<>(); - for (String s : loaded.getProperty(BundleConstants.BUNDLE_WORKDIRS, "").split(":")) { - String p = s.trim(); - if (!p.isEmpty()) { - SystemUtils.checkCommonRelative(null, p); - ll.add(p); - } - } - ci.addWorkingDirectories(ll); - String licType = loaded.getProperty(BundleConstants.BUNDLE_LICENSE_TYPE); - if (licType != null) { - ci.setLicenseType(licType); - } - String postInst = loaded.getProperty(BundleConstants.BUNDLE_MESSAGE_POSTINST); - if (postInst != null) { - String text = postInst.replace("\\n", "\n").replace("\\\\", "\\"); // NOI18N - ci.setPostinstMessage(text); - } - String u = loaded.getProperty(CommonConstants.BUNDLE_ORIGIN_URL); - if (u != null) { - try { - ci.setRemoteURL(SystemUtils.toURL(u)); - } catch (MalformedURLException ex) { - // ignore - } - } - String dtn = loaded.getProperty(BundleConstants.BUNDLE_COMPONENT_DISTRIBUTION, DistributionType.OPTIONAL.name()); - try { - ci.setDistributionType(DistributionType.valueOf(dtn.toUpperCase(Locale.ENGLISH))); - } catch (IllegalArgumentException ex) { - throw new MetadataException(BundleConstants.BUNDLE_COMPONENT_DISTRIBUTION, - fb.withBundle(DirectoryStorage.class).l10n("ERROR_InvalidDistributionType", dtn)); - } - return ci; - } - - private ComponentInfo getCoreInfo() { - if (graalCore != null) { - return graalCore; - } - - ComponentInfo ci = null; - try { - Path cmpFile = registryPath.resolve(SystemUtils.fileName(BundleConstants.GRAAL_COMPONENT_ID + COMPONENT_FILE_SUFFIX)); - if (Files.isReadable(cmpFile)) { - ci = doLoadComponentMetadata(cmpFile, false); - if (ci != null && !BundleConstants.GRAAL_COMPONENT_ID.equals(ci.getId())) { - // invalid definition - ci = null; - } - } - } catch (IOException ex) { - // ignore - } - if (ci == null) { - Version v = getGraalVMVersion(); - ci = new ComponentInfo(BundleConstants.GRAAL_COMPONENT_ID, - feedback.l10n("NAME_GraalCoreComponent"), v.originalString()); - // set defaults: bundled, supported. - ci.setStability(StabilityLevel.Supported); - } - Path cmpFile = registryPath.resolve(SystemUtils.fileName(BundleConstants.GRAAL_COMPONENT_ID + NATIVE_COMPONENT_FILE_SUFFIX)); - if (Files.exists(cmpFile)) { - ci.setNativeComponent(true); - } - ci.setDistributionType(DistributionType.BUNDLED); - graalCore = ci; - return graalCore; - } - - @Override - public Set loadComponentMetadata(String tag) throws IOException { - Path cmpFile = registryPath.resolve(SystemUtils.fileName(tag + COMPONENT_FILE_SUFFIX)); - boolean nc = false; - if (BundleConstants.GRAAL_COMPONENT_ID.equals(tag)) { - return Collections.singleton(getCoreInfo()); - } - if (!Files.exists(cmpFile)) { - cmpFile = registryPath.resolve(SystemUtils.fileName(tag + NATIVE_COMPONENT_FILE_SUFFIX)); - if (!Files.exists(cmpFile)) { - return null; - } - nc = true; - } - return Collections.singleton(doLoadComponentMetadata(cmpFile, nc)); - } - - private ComponentInfo doLoadComponentMetadata(Path cmpFile, boolean nc) throws IOException { - try (InputStream fileStream = Files.newInputStream(cmpFile)) { - ComponentInfo info = loadMetadataFrom(fileStream); - info.setInfoPath(cmpFile.toString()); - info.setNativeComponent(nc); - return info; - } - } - - /** - * Loads component files into its metadata. - * - * @param ci the component metadata - * @return initialized ComponentInfo - * @throws IOException on I/O errors - */ - @Override - public ComponentInfo loadComponentFiles(ComponentInfo ci) throws IOException { - String tag = ci.getId(); - Path listFile = registryPath.resolve(SystemUtils.fileName(tag + LIST_FILE_SUFFIX)); - if (!Files.exists(listFile)) { - return ci; - } - List s = Files.readAllLines(listFile); - // throw away duplicities, sort. - Set result = new HashSet<>(s.size()); - for (String e : s) { - String trimmed = e.trim(); - if (!trimmed.isEmpty()) { - SystemUtils.checkCommonRelative(null, trimmed); - result.add(trimmed); - } - } - s = new ArrayList<>(result); - Collections.sort(s); - ci.addPaths(s); - return ci; - } - - private String getRequiredProperty(String key) { - String val = loaded.getProperty(key); - if (val == null) { - throw feedback.failure("STORAGE_CorruptedComponentStorage", null); - } - return val; - } - - @Override - @SuppressWarnings("unchecked") - public Map> readReplacedFiles() throws IOException { - Path replacedPath = registryPath.resolve(SystemUtils.fromCommonString(PATH_REPLACED_FILES)); - Map> result = new HashMap<>(); - Properties props = new Properties(); - if (!Files.exists(replacedPath)) { - return result; - } - try (InputStream is = Files.newInputStream(replacedPath)) { - props.load(is); - } - for (String s : Collections.list((Enumeration) props.propertyNames())) { - String files = props.getProperty(s, ""); // NOI18N - Collection unsorted = new HashSet<>(); - for (String x : files.split(" *, *")) { // NOI18N - String t = x.trim(); - if (!t.isEmpty()) { - SystemUtils.checkCommonRelative(null, t); - unsorted.add(t); - } - } - List components = new ArrayList<>(unsorted); - Collections.sort(components); - result.put(s, components); - } - return result; - } - - @Override - public void updateReplacedFiles(Map> replacedFiles) throws IOException { - Properties props = new SortedProperties(); - for (String k : replacedFiles.keySet()) { - List ids = new ArrayList<>(replacedFiles.get(k)); - Collections.sort(ids); - props.setProperty(k, String.join(",", ids)); - } - Path replacedPath = registryPath.resolve(SystemUtils.fromCommonString(PATH_REPLACED_FILES)); - if (props.isEmpty()) { - Files.deleteIfExists(replacedPath); - } else { - try (OutputStream os = Files.newOutputStream(replacedPath, - StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { - props.store(os, null); - } - } - } - - /** - * Deletes component's files. - * - * @param id component id - * @throws IOException - */ - @Override - public void deleteComponent(String id) throws IOException { - Path compFile = registryPath.resolve(SystemUtils.fileName(id + COMPONENT_FILE_SUFFIX)); - Path listFile = registryPath.resolve(SystemUtils.fileName(id + LIST_FILE_SUFFIX)); - Files.deleteIfExists(compFile); - Files.deleteIfExists(listFile); - } - - /** - * Will persist component's metadata. - * - * @param info - * @throws IOException on failure - */ - @Override - public void saveComponent(ComponentInfo info) throws IOException { - // hack: if the component is null, just verify that the user has access to the registry's - // data - verifyUserAccess(); - if (info == null) { - return; - } - if (info.isNativeComponent()) { - return; - } - Path cmpFile = registryPath.resolve(SystemUtils.fileName(info.getId() + COMPONENT_FILE_SUFFIX)); - try (OutputStream compFile = Files.newOutputStream(cmpFile, StandardOpenOption.CREATE, - StandardOpenOption.TRUNCATE_EXISTING)) { - metaToProperties(info).store(compFile, null); - } - saveComponentFileList(info); - } - - public static Properties metaToProperties(ComponentInfo info) { - SortedProperties p = new SortedProperties(); - p.setProperty(BundleConstants.BUNDLE_ID, info.getId()); - p.setProperty(BundleConstants.BUNDLE_NAME, info.getName()); - p.setProperty(BundleConstants.BUNDLE_VERSION, info.getVersionString()); - String s = info.getTag(); - if (s != null && !s.isEmpty()) { - p.setProperty(BundleConstants.BUNDLE_SERIAL, s); - } - if (info.getLicensePath() != null) { - p.setProperty(BundleConstants.BUNDLE_LICENSE_PATH, info.getLicensePath()); - } - if (info.getLicenseType() != null) { - p.setProperty(BundleConstants.BUNDLE_LICENSE_TYPE, info.getLicenseType()); - } - if (info.getStability() != StabilityLevel.Undefined) { - p.setProperty(BundleConstants.BUNDLE_STABILITY2, info.getStability().toString()); - } - for (String k : info.getRequiredGraalValues().keySet()) { - String v = info.getRequiredGraalValues().get(k); - if (v == null) { - v = ""; // NOI18N - } - p.setProperty(BUNDLE_REQUIRED_PREFIX + k, v); - } - for (String k : info.getProvidedValues().keySet()) { - Object o = info.getProvidedValue(k, Object.class); - char t; - if (o instanceof String) { - t = '"'; // NOI18N - } else if (o instanceof Version) { - t = 'V'; - o = ((Version) o).originalString(); - } else { - continue; - } - p.setProperty(BUNDLE_PROVIDED_PREFIX + k, t + o.toString()); - } - if (!info.getDependencies().isEmpty()) { - p.setProperty(BundleConstants.BUNDLE_DEPENDENCY, info.getDependencies().stream().sequential().collect(Collectors.joining(","))); - } - if (info.getPostinstMessage() != null) { - p.setProperty(BundleConstants.BUNDLE_MESSAGE_POSTINST, info.getPostinstMessage()); - } - if (!info.getWorkingDirectories().isEmpty()) { - p.setProperty(BundleConstants.BUNDLE_WORKDIRS, info.getWorkingDirectories().stream().sequential().collect(Collectors.joining(":"))); - } - if (info.getDistributionType() != DistributionType.OPTIONAL) { - p.setProperty(BundleConstants.BUNDLE_COMPONENT_DISTRIBUTION, info.getDistributionType().name().toLowerCase(Locale.ENGLISH)); - } - URL u = info.getRemoteURL(); - if (u != null) { - p.setProperty(CommonConstants.BUNDLE_ORIGIN_URL, u.toString()); - } - return p; - } - - void saveComponentFileList(ComponentInfo info) throws IOException { - Path listFile = registryPath.resolve(SystemUtils.fileName(info.getId() + LIST_FILE_SUFFIX)); - List entries = new ArrayList<>(new HashSet<>(info.getPaths())); - Collections.sort(entries); - - Files.write(listFile, entries, StandardOpenOption.CREATE, - StandardOpenOption.TRUNCATE_EXISTING); - } - - private static String transliterateLicenseId(String licenseID) { - return licenseID.replaceAll("[^-\\p{Alnum}.,_()@^{}~]", "_"); - } - - @Override - public Date licenseAccepted(ComponentInfo info, String licenseID) { - if (!SystemUtils.isLicenseTrackingEnabled()) { - return null; - } - String id = transliterateLicenseId(licenseID); - try { - String fn = MessageFormat.format(LICENSE_FILE_TEMPLATE, id, info == null ? "_all" : info.getId()); - Path listFile = registryPath.resolve(SystemUtils.fromCommonRelative(fn)); - if (!Files.isReadable(listFile)) { - return null; - } - return new Date(Files.getLastModifiedTime(listFile).toMillis()); - } catch (IOException ex) { - throw feedback.failure("ERR_CannotReadAcceptance", ex, licenseID); - } - } - - @Override - public Map> findAcceptedLicenses() { - if (!SystemUtils.isLicenseTrackingEnabled()) { - return Collections.emptyMap(); - } - Path licDir = registryPath.resolve(LICENSE_DIR); - Map> result = new HashMap<>(); - try { - if (!Files.isDirectory(licDir)) { - return Collections.emptyMap(); - } - Files.walk(licDir).forEach((lp) -> { - if (!Files.isRegularFile(lp)) { - return; - } - Path parent = lp.getParent(); - if (parent.equals(licDir)) { - return; - } - String fn = parent.getFileName().toString(); - if (!fn.endsWith(".accepted")) { - return; - } - int dot = fn.lastIndexOf('.'); - String fnid = fn.substring(0, dot); - String id; - try { - Path p = registryPath.resolve(SystemUtils.fromCommonRelative(MessageFormat.format(LICENSE_CONTENTS_ID, fnid))); - if (Files.exists(p)) { - List lines = Files.readAllLines(p); - id = lines.get(0); - } else { - id = fnid; - } - } catch (IOException ex) { - throw new UncheckedIOException(ex); - } - result.computeIfAbsent(id, (x) -> new ArrayList<>()).add(lp.getFileName().toString()); - }); - } catch (UncheckedIOException ex) { - throw feedback.failure("ERR_CannotReadAcceptance", ex.getCause(), "(all)"); - } catch (IOException ex) { - throw feedback.failure("ERR_CannotReadAcceptance", ex, "(all)"); - } - return result; - } - - @Override - public void recordLicenseAccepted(ComponentInfo info, String licenseID, String licenseText, Date d) throws IOException { - if (!SystemUtils.isLicenseTrackingEnabled()) { - return; - } - if (licenseID == null) { - clearRecordedLicenses(); - return; - } - String id = transliterateLicenseId(licenseID); - String fn = MessageFormat.format(LICENSE_FILE_TEMPLATE, id, info == null ? "_all" : info.getId()); - Path listFile = registryPath.resolve(SystemUtils.fromCommonRelative(fn)); - if (listFile == null) { - throw new IllegalArgumentException(licenseID); - } - Path dir = listFile.getParent(); - if (dir == null) { - throw new IllegalArgumentException(licenseID); - } - if (!Files.isDirectory(dir)) { - // create the directory - Files.createDirectories(dir); - Path contentsFile = registryPath.resolve(SystemUtils.fromCommonRelative( - MessageFormat.format(LICENSE_CONTENTS_NAME, id))); - Files.write(contentsFile, Arrays.asList(licenseText.split("\n"))); - if (!id.equals(licenseID)) { - Path p = registryPath.resolve(SystemUtils.fromCommonRelative(MessageFormat.format(LICENSE_CONTENTS_ID, id))); - Files.write(p, Arrays.asList(licenseID)); - } - } - String ds = (d == null ? new Date() : d).toString(); - Files.write(listFile, Collections.singletonList(ds), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); - } - - void clearRecordedLicenses() throws IOException { - Path listFile = registryPath.resolve(LICENSE_DIR); - if (Files.isDirectory(listFile)) { - try (Stream paths = Files.walk(listFile)) { - paths.sorted(Comparator.reverseOrder()).forEach((p) -> { - try { - if (p.equals(listFile)) { - return; - } - Files.delete(p); - } catch (IOException ex) { - throw new UncheckedIOException(ex); - } - }); - } catch (UncheckedIOException ex) { - throw ex.getCause(); - } - } - } - - @Override - public String licenseText(String licID) { - Path contentsFile = registryPath.resolve(SystemUtils.fromCommonRelative( - MessageFormat.format(LICENSE_CONTENTS_NAME, transliterateLicenseId(licID)))); - try { - return Files.lines(contentsFile).collect(Collectors.joining("\n")); - } catch (IOException ex) { - throw feedback.failure("ERR_CannotReadAcceptance", ex, licID); - } - } - - void verifyUserAccess() { - if (Files.isWritable(registryPath)) { - return; - } - try { - String owner = SystemUtils.findFileOwner(registryPath); - if (owner != null) { - throw feedback.failure("ERROR_MustBecomeUser", null, owner); - } - } catch (IOException ex) { - // ignore, use generic message - } - throw feedback.failure("ERROR_MustBecomeAdmin", null); - } - - @Override - public int hashCode() { - int hash = 3; - hash = 97 * hash + Objects.hashCode(this.graalHomePath); - return hash; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final DirectoryStorage other = (DirectoryStorage) obj; - if (!Objects.equals(this.graalHomePath, other.graalHomePath)) { - return false; - } - return true; - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/HeaderParser.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/HeaderParser.java deleted file mode 100644 index 85c909b398ef..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/HeaderParser.java +++ /dev/null @@ -1,656 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.util.Collections; -import org.graalvm.component.installer.MetadataException; -import org.graalvm.component.installer.DependencyException; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.function.Predicate; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.StabilityLevel; - -/** - * Parses OSGI-like metadata in JAR component bundles. - */ -public class HeaderParser { - private static final String DIRECTIVE_FILTER = "filter"; // NOI18N - - private final String headerName; - private final Map parameters = new HashMap<>(); - private final Map directives = new HashMap<>(); - private final Map filterValue = new HashMap<>(); - private final Map capabilities = new HashMap<>(); - private final Set dependencies = new HashSet<>(); - private final Feedback feedback; - - private String header; - private int pos; - private String directiveOrParameterName; - private int contentStart; - private String versionFilter; - - // static final ResourceBundle BUNDLE = - // ResourceBundle.getBundle("org.graalvm.component.installer.persist.Bundle"); - - public HeaderParser(String headerName, String header, Feedback feedback) { - this.headerName = headerName; - this.feedback = feedback.withBundle(HeaderParser.class); - - if (header != null) { - // trim whitespaces; - this.header = header.trim(); - } else { - this.header = ""; - } - } - - private MetadataException metaEx(String key, Object... args) { - return new MetadataException(headerName, feedback.l10n(key, args)); - } - - public HeaderParser mustExist() throws MetadataException { - if (header == null || header.isEmpty()) { - throw metaEx("ERROR_HeaderMissing", headerName); - } - return this; - } - - private static boolean isAlphaNum(char c) { - return (c >= '0' && c <= '9') || // NOI18N - (c >= 'A' && c <= 'Z') || // NOI18N - (c >= 'a' && c <= 'z'); // NOI18N - } - - private static boolean isToken(char c) { - return isAlphaNum(c) || c == '_' || c == '-'; // NOI18N - } - - private static boolean isExtended(char c) { - return isToken(c) || c == '.'; - } - - public boolean getBoolean(Boolean defValue) { - if (pos >= header.length()) { - if (defValue == null) { - throw metaEx("ERROR_HeaderMissing", headerName); // NOI18N - } - return defValue; - } else { - String s = header.substring(pos).trim().toLowerCase(Locale.ENGLISH); - switch (s) { - case "true": // NOI18N - return true; - case "false": // NOI18N - return false; - } - throw metaEx("ERROR_HeaderInvalid", headerName, s); // NOI18N - } - } - - public String getContents(String defValue) { - if (pos >= header.length()) { - return defValue; - } else { - return header.substring(pos).trim(); - } - } - - private void addFilterAttribute(String attrName, String value) { - if (filterValue.put(attrName, value) != null) { - throw metaErr("ERROR_DuplicateFilterAttribute"); - } - } - - private boolean isEmpty() { - return pos >= header.length(); - } - - public String parseSymbolicName() throws MetadataException { - return parseNameOrNamespace(HeaderParser::isToken, "ERROR_MissingSymbolicName", "ERROR_InvalidSymbolicName", '.'); - } - - private char next() { - return pos < header.length() ? header.charAt(pos++) : 0; - } - - private void advance() { - pos++; - } - - private char ch() { - return isEmpty() ? 0 : header.charAt(pos); - } - - private String returnCut() { - String s = cut(); - skipWhitespaces(); - return s; - } - - private void skipWhitespaces() { - while (!isEmpty()) { - if (!Character.isWhitespace(ch())) { - contentStart = pos; - return; - } - advance(); - } - contentStart = -1; - } - - private void skipWithSemicolon() { - skipWhitespaces(); - if (ch() == ';') { - advance(); - } - contentStart = -1; - } - - private String cut() { - return cut(0); - } - - private String cut(int delim) { - int e = pos - delim; - return contentStart == -1 || contentStart >= e ? "" : header.substring(contentStart, e); // NOI18N - } - - private void markContent() { - contentStart = pos; - } - - private String readExtendedParameter() throws MetadataException { - skipWhitespaces(); - while (!isEmpty()) { - char c = next(); - if (Character.isWhitespace(c)) { - break; - } - if (c == ';') { - pos--; - break; - } - if (!isExtended(c)) { - throw metaEx("ERROR_InvalidParameterSyntax", directiveOrParameterName); - } - } - String s = cut(); - skipWithSemicolon(); - return s; - } - - private String readQuotedParameter() throws MetadataException { - markContent(); - while (!isEmpty()) { - char c = next(); - switch (c) { - case '"': - String s = cut(1); - skipWithSemicolon(); - return s; - case '\n': - case '\r': - case 0: - throw metaEx("ERROR_InvalidQuotedString"); - case '\\': - next(); - break; - } - } - throw metaEx("ERROR_InvalidQuotedString"); - } - - private String parseArgument() throws MetadataException { - skipWhitespaces(); - char c = ch(); - if (c == ';') { - throw metaEx("ERROR_MissingArgument", directiveOrParameterName); - } - if (c == '"') { // NOI18N - advance(); - return readQuotedParameter(); - } else { - return readExtendedParameter(); - } - } - - private String parseNameOrNamespace(Predicate charAcceptor, - String missingKeyName, String invalidKeyName, char compDelimiter) throws MetadataException { - if (header == null || isEmpty()) { - throw metaEx(missingKeyName); - } - skipWhitespaces(); - boolean componentEmpty = true; - while (!isEmpty()) { - char c = ch(); - if (c == ';' || c == ',') { - String s = cut(); - return s; - } - advance(); - if (c == compDelimiter) { - if (componentEmpty) { - throw metaEx(invalidKeyName); - } - componentEmpty = true; - continue; - } - if (Character.isWhitespace(c)) { - break; - } - if (!charAcceptor.test(c)) { - throw metaEx(invalidKeyName); - } - componentEmpty = false; - } - return returnCut(); - } - - private String parseNamespace() throws MetadataException { - return parseNameOrNamespace(HeaderParser::isExtended, "ERROR_MissingCapabilityName", "ERROR_InvalidCapabilityName", (char) 0); - } - - /** - * Parses version at the current position. - */ - public String version() throws MetadataException { - int versionStart = -1; - int partCount = 0; - boolean partContents = false; - if (isEmpty()) { - throw metaErr("ERROR_InvalidVersion"); - } - boolean dash = false; - while (!isEmpty()) { - char c = ch(); - - if (Character.isWhitespace(c)) { - if (versionStart != -1) { - break; - } - advance(); - continue; - } - - if (c == ';') { - break; - } - advance(); - if (c == '.') { - ++partCount; - if (!partContents) { - throw metaErr("ERROR_InvalidVersion"); - } - partContents = false; - dash = false; - continue; - } - if (partCount > 0 && partContents && c == '-') { - dash = true; - continue; - } - if (c >= '0' && c <= '9') { - if (versionStart == -1) { - versionStart = pos - 1; - } - } else { - if (partCount < 1) { - throw metaErr("ERROR_InvalidVersion"); - } - boolean err = false; - if (partCount >= 3 || dash) { - err = !isToken(c); - } else { - err = true; - } - if (err) { - throw metaErr("ERROR_InvalidVersion"); - } - } - partContents = true; - } - String v = cut(); - skipWhitespaces(); - if (!isEmpty() || !partContents) { - throw metaErr("ERROR_InvalidVersion"); - } - - return v; - } - - private String readExtendedName() { - skipWhitespaces(); - while (!isEmpty()) { - char c = ch(); - if (isExtended(c)) { - advance(); - } else if (Character.isWhitespace(c) || c == ':' || c == '=' || c == ';') { - break; - } else { - throw metaEx("ERROR_InvalidParameterName"); - } - } - return returnCut(); - } - - private void parseParameters() { - while (!isEmpty()) { - String paramOrDirectiveName = readExtendedName(); - if (paramOrDirectiveName.isEmpty()) { - throw metaEx("ERROR_InvalidParameterName"); - } - directiveOrParameterName = paramOrDirectiveName; - - char c = ch(); - boolean dcolon = c == ':'; // NOI18N - if (dcolon) { - advance(); - } - c = next(); - if (c != '=') { // NOI18N - throw metaEx("ERROR_InvalidParameterSyntax", paramOrDirectiveName); - } - (dcolon ? directives : parameters).put(paramOrDirectiveName, parseArgument()); - } - } - - private void replaceInputText(String text) { - this.header = text; - this.pos = 0; - } - - private MetadataException metaErr(String key, Object... args) throws MetadataException { - throw metaEx(key, args); - } - - private MetadataException filterError() throws MetadataException { - throw metaErr("ERROR_InvalidFilterSpecification"); - } - - private void parseFilterConjunction() { - skipWhitespaces(); - char c = next(); - while (c == '(') { - parseFilterContent(); - c = next(); - } - if (c != ')') { - throw filterError(); - } - } - - private void parseFilterClause() { - skipWhitespaces(); - int lastPos = -1; - W: while (!isEmpty()) { - char c = ch(); - if (Character.isWhitespace(c)) { - if (lastPos == -1) { - lastPos = pos; - } - continue; - } - switch (c) { - case '=': - case '<': - case '>': - case '~': - case '(': - case ')': - break W; - } - lastPos = -1; - advance(); - } - - String attributeName = returnCut(); - char c = next(); - if (c != '=') { - throw metaErr("ERROR_UnsupportedFilterOperation"); - } - c = ch(); - if (c == '*') { - throw metaErr("ERROR_UnsupportedFilterOperation"); - } - markContent(); - while (!isEmpty()) { - c = next(); - if (c == ')') { - addFilterAttribute(attributeName, cut(1)); - skipWhitespaces(); - return; - } - - switch (c) { - case '\\': - c = next(); - if (c == 0) { - throw filterError(); - } - break; - case '*': - throw metaErr("ERROR_UnsupportedFilterOperation"); - case '(': - case '<': - case '>': - case '~': - case '=': - throw filterError(); - } - } - throw filterError(); - } - - private void parseFilterContent() { - skipWhitespaces(); - char o = ch(); - if (o == '&') { - advance(); - parseFilterConjunction(); - } else if (isExtended(o)) { - parseFilterClause(); - } else { - throw metaErr("ERROR_InvalidFilterSpecification"); - } - } - - private void parseFilterSpecification() { - skipWhitespaces(); - if (isEmpty()) { - throw filterError(); - } - char c = next(); - if (c == '(') { - parseFilterContent(); - skipWhitespaces(); - if (!isEmpty()) { - throw metaErr("ERROR_InvalidFilterSpecification"); - } - } else { - throw filterError(); - } - } - - /** - * Parses required capabilities string. - * - * org.graalvm; filter:="(&(graalvm_version=0.32)(os_name=linux)(os_arch=amd64))" - * - * @return graal capabilities - * @throws MetadataException - */ - public Map parseRequiredCapabilities() { - String namespace = parseNamespace(); - - char c = next(); - if (c != ';' && c != 0) { - throw metaErr("ERROR_InvalidFilterSpecification"); - } - - if (!BundleConstants.GRAALVM_CAPABILITY.equals(namespace)) { - // unsupported capability - throw new MetadataException(BundleConstants.BUNDLE_REQUIRED, feedback.l10n("ERROR_UnknownCapability")); - } - parseParameters(); - - if (!parameters.isEmpty()) { - throw metaErr("ERROR_UnsupportedParameters"); - } - versionFilter = directives.remove(DIRECTIVE_FILTER); - if (!directives.isEmpty()) { - throw metaErr("ERROR_UnsupportedDirectives"); - } - if (versionFilter == null) { - throw metaErr("ERROR_MissingVersionFilter"); - } - - // replace the input text, the rest of header will be ignored - replaceInputText(versionFilter); - parseFilterSpecification(); - - return filterValue; - } - - public Map parseProvidedCapabilities() { - if (isEmpty()) { - return Collections.emptyMap(); - } - String namespace = parseNamespace(); - - char c = next(); - if (c != ';' && c != 0) { - throw metaErr("ERROR_InvalidCapabilitySyntax"); - } - - if (!BundleConstants.GRAALVM_CAPABILITY.equals(namespace)) { - // unsupported capability - throw new DependencyException(namespace, null, null, feedback.l10n("ERROR_UnknownCapability")); - } - while (!isEmpty()) { - parseCapability(); - } - return capabilities; - } - - public StabilityLevel parseStability() { - if (isEmpty()) { - return StabilityLevel.Undefined; - } - return StabilityLevel.valueOfMixedCase(getContents("")); - } - - public Set parseDependencies() { - if (isEmpty()) { - return Collections.emptySet(); - } - while (!isEmpty()) { - String sn = parseSymbolicName(); - dependencies.add(sn); - skipWhitespaces(); - if (isEmpty()) { - break; - } - char c = next(); - switch (c) { - case ',': - // OK - break; - case ';': - throw metaEx("ERROR_DependencyParametersNotSupported"); - } - } - return dependencies; - } - - private void parseCapability() { - String capName = readExtendedName(); - if (capName.isEmpty()) { - throw metaEx("ERROR_InvalidCapabilityName"); - } - directiveOrParameterName = capName; - - char c = next(); - boolean dcolon = c == ':'; // NOI18N - boolean makeVersion = false; - if (dcolon) { - if (ch() == '=') { - throw metaEx("ERROR_InvalidCapabilitySyntax", capName); - } - skipWhitespaces(); - while (true) { - if (isEmpty()) { - throw metaEx("ERROR_InvalidCapabilitySyntax", capName); - } - c = next(); - if (Character.isWhitespace(c) || c == '=' || c == ';') { - if (isEmpty()) { - throw metaEx("ERROR_InvalidCapabilitySyntax", capName); - } - break; - } else if (!isAlphaNum(c)) { - throw metaEx("ERROR_InvalidCapabilitySyntax", capName); - } - } - String type = cut(1); - - switch (type.toLowerCase(Locale.ENGLISH)) { - case "version": - makeVersion = true; - break; - case "string": - break; - case "long": - case "double": - case "": - default: - throw metaEx("ERROR_UnsupportedCapabilityType", capName, type); - } - skipWhitespaces(); - } - if (c != '=') { // NOI18N - throw metaEx("ERROR_InvalidCapabilitySyntax", capName); - } - String s = parseArgument(); - Object o; - - if (makeVersion) { - try { - o = Version.fromString(s); - } catch (IllegalArgumentException ex) { - throw metaEx("ERROR_InvalidCapabilityVersion", capName, s); - } - } else { - o = s; - } - capabilities.put(capName, o); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/MetadataLoader.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/MetadataLoader.java deleted file mode 100644 index 3a43d773b721..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/MetadataLoader.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.Closeable; -import java.io.IOException; -import java.util.Date; -import java.util.List; -import java.util.Map; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.InstallerStopException; -import org.graalvm.component.installer.SuppressFBWarnings; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.remote.FileDownloader; - -/** - * Abstraction that loads metadata for a given component. - * - * @author sdedic - */ -public interface MetadataLoader extends Closeable { - - ComponentInfo getComponentInfo(); - - List getErrors(); - - Archive getArchive() throws IOException; - - /** - * License name/type. Not the actual content, but general name, like "Oracle OTN license", - * "GPLv2" or so. - * - * @return license type or {@code null} - */ - String getLicenseType(); - - /** - * License ID. Usually a digest of the license file contents. - * - * @return license ID - */ - String getLicenseID(); - - /** - * Path to the license file. Should be to iterate through {@link #getArchive} to obtain the - * license contents. - * - * @return path to the license or {@code null} - */ - String getLicensePath(); - - MetadataLoader infoOnly(boolean only); - - boolean isNoVerifySymlinks(); - - void loadPaths() throws IOException; - - Map loadPermissions() throws IOException; - - Map loadSymlinks() throws IOException; - - void setNoVerifySymlinks(boolean noVerifySymlinks); - - /** - * Completes the metadata. The entire file may be loaded in order to load all the metadata. - * - * @throws IOException if the metadata load fails. - * @return ComponentInfo with completed metadata - */ - ComponentInfo completeMetadata() throws IOException; - - default FileDownloader configureRelatedDownloader(FileDownloader dn) { - return dn; - } - - @SuppressWarnings("unused") - default Date isLicenseAccepted(ComponentInfo info, String licenseID) { - return null; - } - - /** - * A provider-dependent way of accepting a license. If the Loader returns {@code true}, it has - * to record the accepted license on its own. Returning {@code false} will suppress the default - * recording. {@code null} means the default recording should be used. - *

- * The default implementation returns {@code null}. - * - * @param info Component for which the license is being accepted. - * @param licenseID ID of the license. - * @param licenseText The text of the license. - * @param d date accepted - * @return recording decision. - * @throws IOException - */ - @SuppressFBWarnings(value = "NP_BOOLEAN_RETURN_NULL", justification = "The return value is a tri-state, indicates a success, denial, or default.") - default Boolean recordLicenseAccepted(ComponentInfo info, String licenseID, String licenseText, Date d) throws IOException { - return null; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/MetadataLoaderAdapter.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/MetadataLoaderAdapter.java deleted file mode 100644 index a839108116ac..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/MetadataLoaderAdapter.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.io.IOException; -import java.util.Date; -import java.util.List; -import java.util.Map; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.InstallerStopException; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.remote.FileDownloader; - -/** - * Delegation adapter, for easier wrapping a MetadataLoader instance. - * - * @author sdedic - */ -public class MetadataLoaderAdapter implements MetadataLoader { - private final MetadataLoader delegate; - - public MetadataLoaderAdapter(MetadataLoader delegate) { - this.delegate = delegate; - } - - @Override - public ComponentInfo getComponentInfo() { - return delegate.getComponentInfo(); - } - - @Override - public List getErrors() { - return delegate.getErrors(); - } - - @Override - public Archive getArchive() throws IOException { - return delegate.getArchive(); - } - - @Override - public String getLicenseType() { - return delegate.getLicenseType(); - } - - @Override - public String getLicenseID() { - return delegate.getLicenseID(); - } - - @Override - public String getLicensePath() { - return delegate.getLicensePath(); - } - - @Override - public MetadataLoader infoOnly(boolean only) { - return delegate.infoOnly(only); - } - - @Override - public boolean isNoVerifySymlinks() { - return delegate.isNoVerifySymlinks(); - } - - @Override - public void loadPaths() throws IOException { - delegate.loadPaths(); - } - - @Override - public Map loadPermissions() throws IOException { - return delegate.loadPermissions(); - } - - @Override - public Map loadSymlinks() throws IOException { - return delegate.loadSymlinks(); - } - - @Override - public void setNoVerifySymlinks(boolean noVerifySymlinks) { - delegate.setNoVerifySymlinks(noVerifySymlinks); - } - - @Override - public ComponentInfo completeMetadata() throws IOException { - return delegate.completeMetadata(); - } - - @Override - public FileDownloader configureRelatedDownloader(FileDownloader dn) { - return delegate.configureRelatedDownloader(dn); - } - - @Override - public Boolean recordLicenseAccepted(ComponentInfo info, String licenseID, String licenseText, Date d) throws IOException { - return delegate.recordLicenseAccepted(info, licenseID, licenseText, d); - } - - @Override - public void close() throws IOException { - delegate.close(); - } - - @Override - public Date isLicenseAccepted(ComponentInfo info, String licenseID) { - return delegate.isLicenseAccepted(info, licenseID); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/SortedProperties.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/SortedProperties.java deleted file mode 100644 index 902dbf9c730d..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/persist/SortedProperties.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.persist; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.Enumeration; -import java.util.List; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.TreeSet; - -/** - * Provides sorted properties, for deterministic saves. - */ -public final class SortedProperties extends Properties { - - private static final long serialVersionUID = 1L; - - @Override - @SuppressWarnings({"rawtypes", "unchecked"}) - public Enumeration propertyNames() { - return (Enumeration) keys(); - } - - @Override - @SuppressWarnings({"rawtypes", "unchecked"}) - public synchronized Enumeration keys() { - Enumeration keysEnum = super.keys(); - List keyList = new ArrayList<>(); - while (keysEnum.hasMoreElements()) { - keyList.add((String) keysEnum.nextElement()); - } - Collections.sort(keyList); - return Collections.enumeration((Collection) keyList); - } - - @Override - public Set> entrySet() { - TreeSet> treeSet = new TreeSet<>(Comparator.comparing(o -> ((String) o.getKey()))); - treeSet.addAll(super.entrySet()); - return Collections.synchronizedSet(treeSet); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/Bundle.properties b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/Bundle.properties deleted file mode 100644 index f94b2269d185..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/Bundle.properties +++ /dev/null @@ -1,72 +0,0 @@ -# There's an important trailing space in the next key -MSG_DownloadReceivingBytes=Receiving {0} kB: -# The progress bar should have a frame and exactly 20 space characters -MSG_DownloadProgress@=[ ] -MSG_DownloadProgressSignChar@=# -MSG_DownloadingDone=Done. -MSG_DownloadingDone_Simple@=#DownloadDone -MSG_DownloadingTerminated=Terminated. -MSG_DownloadingTerminated_Simple@=#DownloadTerminated -MSG_Downloading=Downloading: {0} from {1} -MSG_UsingFile=Loading: {0} from local file -MSG_DownloadingVerbose=Downloading: {0} (source: {1}) -MSG_DownloadingFrom=Downloading from: {0} -# {0} file -MSG_Downloading_Simple@=#Download:{0} -MSG_ProgressStart_Simple@=#Size:{0} -MSG_Progress_Simple@=#Received:{0} -MSG_Loaded_Cache=Loaded cache for URL: {0}, stored as: {1} -# {0} - original error message -ERR_ComputeDigest=Error computing digest: {0} -# {0} - expected fingerprint, {1} computed fingerprint -ERR_FileDigestError=Corrupted file, digest does not match. Expected {0}, got {1} - -EXC_ProxyFailed=Failed to connect through proxy: {0} -EXC_TimeoutConnectTo=Timeout while connecting to {0} -EXC_CannotConnectTo=Cannot connect to {0} - -REMOTE_CannotHandleLocation=Unable to handle catalog at {0} - -EXC_InterruptedConnectingTo=Interrupted while connecting to {0} -REBUILD_ErrorCommunicatingImageTool=Error communicating with the image tool: {0} - -# {0} - component prefix -REMOTE_BadComponentVersion=Bad version for component {0} - -REMOTE_IncompatibleComponentVersion=Component {0} does not provide a compatible version. Run with -v to see list of versions. -REMOTE_NoSpecificVersion=Component {0} does not exist in specified version {1} -REMOTE_NoSpecificVersion2=Component {0} does not exist in specified version {1}, pick e.g. {2}. -REMOTE_CannotDeleteLocalFile=Could not delete temporary file {0}: {1} -REMOTE_UnknownComponentId=Component "{0}" is not available in catalog. -REMOTE_UnknownComponentMaybeFile=Component "{0}" is not available in catalog.\n\ - Note: a file {0} exists; to use component stored locally, use -L option \n\ - \tgu -L {0} - -REMOTE_InvalidDownloadURL=Invalid component URL {0}: {1} -REMOTE_InvalidHash=Invalid hash for component {0}: {1} -REMOTE_CatalogLabel=Component catalog -REMOTE_ErrorDownloadCatalogNotFound=The component catalog was not found at {0}. -REMOTE_ErrorDownloadCatalog=Error downloading component catalog from {0}: {1}. \n\ - Please check your connection and proxy settings. \ - If your machine is behind a proxy, set your environment variables (http_proxy, https_proxy, ...) appropriately. -REMOTE_ErrorDownloadCatalogProxy=Component catalog is unreachable. \n\ - Please check your connection and proxy settings. \ - If your machine is behind a proxy, set your environment variables (http_proxy, https_proxy, ...) appropriately. -REMOTE_CorruptedCatalogFile=Catalog file {0} is corrupted. -REMOTE_ComponentFileLabel=Component {1}: {0} -REMOTE_UnsupportedGraalVersion=Unsupported GraalVM version: {0}, platform {1}/{2} -REMOTE_ErrorDownloadingComponent=Error downloading component {0} from {1}: {2} -REMOTE_ErrorDownloadingNotExist=Package for component {0} is not accessible at {1} -REMOTE_UpgradeGraalVMCore=Component {0} requires to upgrade GraalVM Core to at least {1}. -REMOTE_FailedToParseParameter=Failed to parse location parameter: {0} -# {0} - channel label -# {1} - exception message -REMOTE_CannotLoadChannel=Could not load channel {0}: {1} - -# {0} - edition id (i.e. CE, EE). -ERR_NoSuchEdition=Unknown GraalVM edition: {0} - -LICENSE_RemoteLicenseDescription=Downloading license: {0} -ERROR_DownloadLicense=Could not download license {0}: {1} -WARN_HttpProxyGarbage=WARNING: The http_proxy environment variable value may be incorrect: {0} -WARN_HttpsProxyGarbage=WARNING: The https_proxy environment variable value may be incorrect: {0} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/CatalogIterable.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/CatalogIterable.java deleted file mode 100644 index 34a415d2f085..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/CatalogIterable.java +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Copyright (c) 2018, 2023, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.File; -import java.io.IOException; -import java.nio.file.FileSystems; -import java.nio.file.Path; -import java.nio.file.PathMatcher; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import org.graalvm.component.installer.BundleConstants; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.ComponentIterable; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.FileIterable; -import org.graalvm.component.installer.FileIterable.FileComponent; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.UnknownVersionException; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.DistributionType; -import org.graalvm.component.installer.persist.MetadataLoader; - -/** - * Interprets installer arguments as entries from a catalog. - * - * @author sdedic - */ -public class CatalogIterable implements ComponentIterable { - private final CommandInput input; - private final Feedback feedback; - private ComponentCatalog remoteRegistry; - private boolean verifyJars; - private boolean incompatible; - - public CatalogIterable(CommandInput input, Feedback feedback) { - this.input = input; - this.feedback = feedback.withBundle(CatalogIterable.class); - } - - public boolean isVerifyJars() { - return verifyJars; - } - - @Override - public void setVerifyJars(boolean verifyJars) { - this.verifyJars = verifyJars; - } - - @Override - public Iterator iterator() { - return new It(); - } - - void setRemoteRegistry(ComponentCatalog remote) { - this.remoteRegistry = remote; - } - - ComponentCatalog getRegistry() { - if (remoteRegistry == null) { - remoteRegistry = input.getCatalogFactory().createComponentCatalog(input); - } - return remoteRegistry; - } - - @Override - public ComponentIterable allowIncompatible() { - incompatible = true; - return this; - } - - private Version.Match versionFilter; - - @Override - public ComponentIterable matchVersion(Version.Match m) { - this.versionFilter = m; - return this; - } - - private ComponentParam latest(String s, Collection infos) { - List ordered = new ArrayList<>(infos); - Collections.sort(ordered, ComponentInfo.reverseVersionComparator(input.getLocalRegistry().getManagementStorage())); - boolean progress = input.optValue(Commands.OPTION_NO_DOWNLOAD_PROGRESS) == null; - return createComponentParam(s, ordered.get(0), progress); - } - - private class It implements Iterator { - private void thrownUnknown(String fname, boolean throwUnknown) { - File f = new File(fname); - if (f.exists() && f.isFile()) { - throw feedback.failure("REMOTE_UnknownComponentMaybeFile", null, fname); - } else if (throwUnknown) { - throw feedback.failure("REMOTE_UnknownComponentId", null, fname); - } - } - - @Override - public boolean hasNext() { - return !expandedIds.isEmpty() || input.hasParameter(); - } - - private List expandId(String pattern, Version.Match vm) { - // need to lowercase before passing to glob pattern: on UNIX, glob is case-sensitive, on - // Windows it is not. Lowercase will unify. - PathMatcher pm = FileSystems.getDefault().getPathMatcher("glob:" + pattern.toLowerCase(Locale.ENGLISH)); // NOI18N - Set ids = new HashSet<>(getRegistry().getComponentIDs()); - Map abbreviatedIds = new HashMap<>(); - for (String id : ids) { - Collection infos = getRegistry().loadComponents(id, Version.NO_VERSION.match(Version.Match.Type.GREATER), false); - for (ComponentInfo info : infos) { - abbreviatedIds.put(info, getRegistry().shortenComponentId(info)); - } - } - - // merge full IDs with unambiguous abbreviations. - ids.addAll(abbreviatedIds.values()); - if (ids.contains(pattern)) { - // no wildcards, apparently - return Collections.singletonList(pattern); - } - for (Iterator it = ids.iterator(); it.hasNext();) { - String s = it.next().toLowerCase(Locale.ENGLISH); - if (!pm.matches(SystemUtils.fromUserString(s))) { - it.remove(); - } - } - // translate back to components, to merge abbreviations and full Ids. - Set infos = new HashSet<>(); - ids.forEach(s -> infos.add(getRegistry().findComponent(s, vm))); - List sorted = new ArrayList<>(); - for (ComponentInfo ci : infos) { - if (ci == null) { - continue; - } - String ab = abbreviatedIds.get(ci); - if (pm.matches(SystemUtils.fromUserString(ab))) { - sorted.add(ab); - } else { - sorted.add(ci.getId()); - } - } - Collections.sort(sorted); - return sorted; - } - - /** - * The command line parameters expanded from wildcards. - */ - private final List expandedIds = new ArrayList<>(); - - @Override - public ComponentParam next() { - if (!expandedIds.isEmpty()) { - return processParameter(expandedIds.remove(0)); - } - String s = input.nextParameter(); - Version.Match[] m = new Version.Match[1]; - String id = Version.idAndVersion(s, m); - if (m[0].getType() == Version.Match.Type.MOSTRECENT && versionFilter != null) { - m[0] = versionFilter; - } - List expanded = expandId(id, m[0]); - if (expanded.isEmpty()) { - // just process it ;) - return processParameter(s); - } - String suffix = s.substring(id.length()); - for (String ei : expanded) { - expandedIds.add(ei + suffix); - } - return processParameter(expandedIds.remove(0)); - } - - private ComponentParam processParameter(String s) { - ComponentInfo info; - try { - Version.Match[] m = new Version.Match[1]; - String id = Version.idAndVersion(s, m); - if (m[0].getType() == Version.Match.Type.MOSTRECENT && versionFilter != null) { - m[0] = versionFilter; - } - try { - info = getRegistry().findComponent(id, m[0]); - } catch (UnknownVersionException ex) { - // could not find anything to match the user version against - if (ex.getCandidate() == null) { - throw feedback.failure("REMOTE_NoSpecificVersion", ex, id, m[0].getVersion().displayString()); - } else { - throw feedback.failure("REMOTE_NoSpecificVersion2", ex, id, m[0].getVersion().displayString(), ex.getCandidate().displayString()); - } - } - if (info == null) { - // must be already initialized - ComponentInfo localInfo = input.getLocalRegistry().findComponent(id, m[0]); - if (localInfo != null && localInfo.getDistributionType() == DistributionType.BUNDLED) { - // bundled components are pre-installed and do not need to be downloaded - return createComponentParam(s, localInfo, false); - } - Version gv = input.getLocalRegistry().getGraalVersion(); - Version.Match selector = gv.match(Version.Match.Type.INSTALLABLE); - Collection infos = getRegistry().loadComponents(id, selector, false); - if (infos != null && !infos.isEmpty()) { - if (incompatible) { - return latest(s, infos); - } - String rvs = infos.iterator().next().getRequiredGraalValues().get(BundleConstants.GRAAL_VERSION); - Version rv = Version.fromString(rvs); - if (rv.compareTo(gv) > 0) { - throw feedback.failure("REMOTE_UpgradeGraalVMCore", null, id, rvs); - } - if (m[0].getType() == Version.Match.Type.EXACT) { - throw feedback.failure("REMOTE_NoSpecificVersion", null, id, m[0].getVersion().displayString()); - } - } - // last try, catch obsolete components: - infos = getRegistry().loadComponents(id, Version.NO_VERSION.match(Version.Match.Type.GREATER), false); - if (infos != null && !infos.isEmpty()) { - if (incompatible) { - return latest(s, infos); - } - throw feedback.failure("REMOTE_IncompatibleComponentVersion", null, id); - } - thrownUnknown(s, true); - } - } catch (FailedOperationException ex) { - thrownUnknown(s, false); - throw ex; - } - boolean progress = input.optValue(Commands.OPTION_NO_DOWNLOAD_PROGRESS) == null; - return createComponentParam(s, info, progress); - } - } - - @Override - public ComponentParam createParam(String cmdString, ComponentInfo info) { - boolean progress = input.optValue(Commands.OPTION_NO_DOWNLOAD_PROGRESS) == null; - return createComponentParam(cmdString, info, progress); - } - - protected ComponentParam createComponentParam(String cmdLineString, ComponentInfo info, boolean progress) { - RemoteComponentParam param = new CatalogItemParam( - getRegistry().getDownloadInterceptor(), - info, - info.getName(), - cmdLineString, - feedback, progress); - param.setVerifyJars(verifyJars); - return param; - } - - public static class CatalogItemParam extends RemoteComponentParam { - final ComponentCatalog.DownloadInterceptor configurer; - - public CatalogItemParam(ComponentCatalog.DownloadInterceptor conf, ComponentInfo catalogInfo, String dispName, String spec, Feedback feedback, boolean progress) { - super(catalogInfo, dispName, spec, feedback, progress); - this.configurer = conf; - } - - @Override - public MetadataLoader createMetaLoader() throws IOException { - if (configurer == null) { - return super.createMetaLoader(); - } else { - return configurer.interceptMetadataLoader(getCatalogInfo(), super.createMetaLoader()); - } - } - - @Override - public FileDownloader configureRelatedDownloader(FileDownloader dn) { - return configurer.processDownloader(getCatalogInfo(), dn); - } - - @Override - protected FileDownloader createDownloader() { - FileDownloader d = super.createDownloader(); - return configureRelatedDownloader(d); - } - - @Override - protected MetadataLoader metadataFromLocal(Path localFile) throws IOException { - String serial = getCatalogInfo().getTag(); - FileDownloader theDownloader = getDownloader(); - if (serial == null || "".equals(serial)) { - serial = theDownloader != null ? SystemUtils.fingerPrint(theDownloader.getReceivedDigest(), false) : null; - } - FileComponent fc = new FileIterable.FileComponent(localFile.toFile(), isVerifyJars(), serial, getFeedback()); - return fc.createFileLoader(); - } - - @Override - public ComponentInfo completeMetadata() throws IOException { - return createFileLoader().completeMetadata(); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/FileDownloader.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/FileDownloader.java deleted file mode 100644 index e114c46da45e..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/FileDownloader.java +++ /dev/null @@ -1,448 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.File; -import java.io.IOException; -import java.io.UncheckedIOException; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; -import java.nio.ByteBuffer; -import java.nio.channels.Channels; -import java.nio.channels.ReadableByteChannel; -import java.nio.channels.SeekableByteChannel; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Consumer; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.URLConnectionFactory; -import java.util.Collections; -import java.util.List; - -/** - * Downloads file to local, optionally checks its integrity using digest. - * - * @author sdedic - */ -public final class FileDownloader { - private static final int TRANSFER_LENGTH = 2048; - private static final long MIN_PROGRESS_THRESHOLD = Long.getLong("org.graalvm.component.installer.minDownloadFeedback", 1024 * 1024); - private final String fileDescription; - private final URL sourceURL; - private final Feedback feedback; - - private File downloadDir; - private File localFile; - private long size; - private static boolean deleteTemporary = !Boolean.FALSE.toString().equals(System.getProperty("org.graalvm.component.installer.deleteTemporary")); - private boolean verbose; - private static volatile File tempDir; - private boolean displayProgress; - private byte[] shaDigest; - long sizeThreshold = MIN_PROGRESS_THRESHOLD; - private final Map requestHeaders = new HashMap<>(); - private Consumer dataInterceptor; - private URLConnectionFactory connectionFactory; - private boolean simpleOutput; - - private Map> responseHeader = Collections.emptyMap(); - private DownloadExceptionInterceptor downloadExceptionInterceptor = (ex, fd) -> ex; - - public interface DownloadExceptionInterceptor { - /** - * When null is returned another connection will be attempted. Otherwise the returned - * Exception is thrown. - */ - IOException interceptDownloadException(IOException downloadException, FileDownloader fileDownloader); - } - - public Map> getResponseHeader() { - return responseHeader; - } - - public Map getRequestHeaders() { - return Collections.unmodifiableMap(requestHeaders); - } - - /** - * Will intercept possible connection problem, if null is returned the downloader will do - * another attempt to download otherwise the returned Exception is thrown. - * - * @param downloadExceptionInterceptor - */ - public void setDownloadExceptionInterceptor(DownloadExceptionInterceptor downloadExceptionInterceptor) { - if (downloadExceptionInterceptor != null) { - this.downloadExceptionInterceptor = downloadExceptionInterceptor; - } - } - - /** - * Algorithm to compute file digest. By default SHA-256 is used. - */ - private String digestAlgorithm = "SHA-256"; - - public FileDownloader(String fileDescription, URL sourceURL, Feedback feedback) { - this.fileDescription = fileDescription; - this.sourceURL = sourceURL; - this.feedback = feedback.withBundle(FileDownloader.class); - } - - public void setShaDigest(byte[] shaDigest) { - this.shaDigest = shaDigest; - } - - public File getDownloadDir() { - return downloadDir; - } - - public void setDownloadDir(File downloadDir) { - this.downloadDir = downloadDir; - } - - public static void setDeleteTemporary(boolean deleteTemporary) { - FileDownloader.deleteTemporary = deleteTemporary; - } - - public void setVerbose(boolean verbose) { - this.verbose = verbose; - } - - public void setDisplayProgress(boolean displayProgress) { - this.displayProgress = displayProgress; - } - - public void addRequestHeader(String header, String val) { - requestHeaders.put(header, val); - } - - public String getDigestAlgorithm() { - return digestAlgorithm; - } - - public void setDigestAlgorithm(String digestAlgorithm) { - this.digestAlgorithm = digestAlgorithm; - } - - public static synchronized File createTempDir() throws IOException { - if (tempDir == null) { - Path p = Files.createTempDirectory("graalvm_install"); // NOI18N - tempDir = p.toFile(); - tempDir.deleteOnExit(); - } - return tempDir; - } - - private static File deleteOnExit(File f) { - if (deleteTemporary) { - f.deleteOnExit(); - } - return f; - } - - public String getFileDescription() { - return fileDescription; - } - - public URL getSourceURL() { - return sourceURL; - } - - private static int toKB(long size) { - return (int) (size + 1023) / 1024; - } - - StringBuilder progressString; - String backspaceString; - int startPos; - int signCount; - long received; - char signChar; - MessageDigest fileDigest; - byte[] receivedDigest; - - public File getLocalFile() { - return localFile; - } - - void setupProgress() { - if (simpleOutput) { - feedback.output("MSG_ProgressStart_Simple@", Long.toString(size)); - return; - } - if (!displayProgress) { - return; - } - progressString = new StringBuilder(feedback.l10n("MSG_DownloadProgress@")); // NOI18N - signChar = feedback.l10n("MSG_DownloadProgressSignChar@").charAt(0); // NOI18N - startPos = progressString.toString().indexOf(' '); - StringBuilder bs = new StringBuilder(progressString.length()); - for (int i = 0; i < progressString.length(); i++) { - bs.append('\b'); // NOI18N - } - backspaceString = bs.toString(); - } - - int cnt(long rcvd) { - return (int) ((rcvd * 20 + (rcvd / 2)) / size); - } - - void makeProgress(boolean first, int chunk) { - if (!displayProgress) { - return; - } - int now = cnt(received); - received += chunk; - int next = cnt(received); - if (now < next) { - if (simpleOutput) { - feedback.output("MSG_Progress_Simple@", Long.toString(received)); - return; - } - progressString.setCharAt(next + startPos - 1, signChar); - signCount = next; - - if (!first) { - feedback.verbatimPart(backspaceString, false); - } - feedback.verbatimPart(progressString.toString(), false); - } - } - - void stopProgress(boolean success) { - if (displayProgress && !simpleOutput) { - feedback.verbatimPart(backspaceString, false); - } - String simpleSuffix = simpleOutput ? "_Simple@" : ""; - if (success) { - feedback.verboseOutput("MSG_DownloadingDone" + simpleSuffix); - } else { - feedback.output("MSG_DownloadingTerminated" + simpleSuffix); - } - } - - void updateFileDigest(ByteBuffer input) throws IOException { - if (shaDigest == null) { - return; - } - if (fileDigest == null) { - try { - fileDigest = MessageDigest.getInstance(getDigestAlgorithm()); // NOI18N - } catch (NoSuchAlgorithmException ex) { - throw new IOException( - feedback.l10n("ERR_ComputeDigest", ex.getLocalizedMessage()), - ex); - } - } - fileDigest.update(input); - } - - static String fingerPrint(byte[] digest) { - return SystemUtils.fingerPrint(digest); - } - - byte[] getDigest() { - return fileDigest.digest(); - } - - public byte[] getReceivedDigest() throws IOException { - if (receivedDigest == null) { - if (localFile == null) { - return null; - } - receivedDigest = SystemUtils.computeFileDigest(localFile.toPath(), getDigestAlgorithm()); - } - return receivedDigest == null ? null : receivedDigest.clone(); - } - - void verifyDigest() throws IOException { - if (shaDigest == null || /* for testing */ shaDigest.length == 0) { - return; - } - byte[] computed = fileDigest.digest(); - this.receivedDigest = computed; - if (Arrays.equals(computed, shaDigest)) { - return; - } - throw new IOException(feedback.l10n("ERR_FileDigestError", - fingerPrint(shaDigest), fingerPrint(computed))); - } - - void configureHeaders(URLConnection con) { - for (String h : requestHeaders.keySet()) { - con.addRequestProperty(h, requestHeaders.get(h)); - } - } - - protected void dataDownloaded(SeekableByteChannel ch) { - if (dataInterceptor != null) { - dataInterceptor.accept(ch); - } - } - - public FileDownloader setDataInterceptor(Consumer interceptor) { - this.dataInterceptor = interceptor; - return this; - } - - private void copySubtree(Path from) throws IOException { - Path to = Files.createTempDirectory(createTempDir().toPath(), "download"); - SystemUtils.copySubtree(from, to); - localFile = to.toFile(); - } - - private int attempt; - - public int getAttemptNr() { - return attempt; - } - - public void download() throws IOException { - Path localCache = feedback.getLocalCache(sourceURL); - if (localCache != null) { - feedback.verboseOutput("MSG_Loaded_Cache", sourceURL, localCache); - localFile = localCache.toFile(); - Map> respCache = feedback.getLocalResponseHeadersCache(sourceURL); - responseHeader = respCache == null ? Collections.emptyMap() : respCache; - return; - } - - simpleOutput = Boolean.TRUE.toString().equals(System.getProperty(CommonConstants.SYSPROP_SIMPLE_OUTPUT)); - boolean fromFile = sourceURL.getProtocol().equals("file"); - if (simpleOutput) { - feedback.output( - "MSG_Downloading_Simple@", - getSourceURL(), getFileDescription() == null ? "" : getFileDescription()); - } else { - if (fileDescription != null) { - if (!feedback.verboseOutput("MSG_DownloadingVerbose", getFileDescription(), getSourceURL())) { - feedback.output(fromFile ? "MSG_UsingFile" : "MSG_Downloading", getFileDescription(), getSourceURL().getHost()); - } - } else { - feedback.output("MSG_DownloadingFrom", getSourceURL()); - } - } - - if (fromFile) { - try { - Path p = Paths.get(sourceURL.toURI()); - if (Files.isDirectory(p)) { - copySubtree(p); - return; - } - } catch (URISyntaxException ex) { - throw new IOException(ex); - } - } - - URLConnectionFactory urlFactory = getConnectionFactory(); - URLConnection conn = null; - attempt = 0; - do { - try { - attempt++; - conn = urlFactory.createConnection(sourceURL, this::configureHeaders); - } catch (IOException ex) { - if ((ex = downloadExceptionInterceptor.interceptDownloadException(ex, this)) != null) { - throw ex; - } - } - } while (conn == null); - - size = conn.getContentLengthLong(); - if (simpleOutput) { - verbose = feedback.verboseOutput(null); - } else { - verbose = feedback.verbosePart("MSG_DownloadReceivingBytes", toKB(size)); - } - if (verbose) { - displayProgress = true; - } - if (size < sizeThreshold) { - displayProgress = false; - } - - setupProgress(); - ByteBuffer bb = ByteBuffer.allocate(TRANSFER_LENGTH); - localFile = deleteOnExit(File.createTempFile("download", "", downloadDir == null ? createTempDir() : downloadDir)); // NOI18N - boolean first = displayProgress; - boolean success = false; - try ( - ReadableByteChannel rbc = Channels.newChannel(conn.getInputStream()); - SeekableByteChannel wbc = Files.newByteChannel(localFile.toPath(), - StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING)) { - int read; - while ((read = rbc.read(bb)) >= 0) { - if (first && !simpleOutput) { - feedback.verbatimPart(progressString.toString(), false); - } - bb.flip(); - while (bb.hasRemaining()) { - wbc.write(bb); - long pos = wbc.position(); - dataDownloaded(wbc); - wbc.position(pos); - } - bb.flip(); - updateFileDigest(bb); - makeProgress(first, read); - bb.clear(); - first = false; - } - success = true; - } catch (UncheckedIOException ex) { - throw ex.getCause(); - } catch (IOException ex) { - // f.delete(); - throw ex; - } finally { - stopProgress(success); - } - verifyDigest(); - responseHeader = conn.getHeaderFields(); - feedback.addLocalFileCache(sourceURL, localFile.toPath()); - feedback.addLocalResponseHeadersCache(sourceURL, responseHeader); - } - - public void setConnectionFactory(URLConnectionFactory connFactory) { - this.connectionFactory = connFactory; - } - - URLConnectionFactory getConnectionFactory() { - if (connectionFactory == null) { - connectionFactory = new ProxyConnectionFactory(feedback, sourceURL); - } - return connectionFactory; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/GraalEditionList.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/GraalEditionList.java deleted file mode 100644 index 0a11418c8719..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/GraalEditionList.java +++ /dev/null @@ -1,588 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.CommandInput.CatalogFactory; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.GraalEdition; -import org.graalvm.component.installer.persist.DirectoryStorage; - -/** - * The class parses catalog definitions and builds a {@link GraalEdition} list of available - * editions. It also serves as a factory for eventual lists for 'foreign graals' in different - * directories at the same time. - *

- * For compatibility reasons it loads from various sources with with precedence as follows: - *

    - *
  1. {@link #overrideCatalogSpec}, which should be set from {@code -C} or GRAALVM_CATALOG_URL - * environment variable by installer launcher. - *
  2. catalog related properties from the release file; each software sources has a URL - * (mandatory), label and potentially parameters. - *
  3. component_catalog property, which defines all the software sources in a single property - *
- * The edition with empty ({@code ""}) id, the edition whose id matches - * {@link CommonConstants#CAP_EDITION} from the release file (see {@link DirectoryStorage} for how - * the defaults are computed) or the first edition found is the default one: its software - * sources will be used to load the catalogs, unless overriden by a command switch. - * - * @author sdedic - */ -public final class GraalEditionList implements CatalogFactory { - static final String CAP_CATALOG_URL_SUFFIX = "_" + CommonConstants.CAP_CATALOG_URL; // NOI18N - - private final CommandInput input; - private final ComponentRegistry targetGraal; - private final Feedback feedback; - - /** - * Editions, the default should be listed first. - */ - private final List editions = new ArrayList<>(); - - /** - * Map ID > edition. - */ - private final Map editionMap = new HashMap<>(); - - /** - * Cache of foreign GraalVM edition definitions. Note there is not identity-consistency between - * foreign's foreign pointing back to this installation. - */ - private final Map foreignGraals = new HashMap<>(); - - /** - * Hand-override, takes precedence over everything. - */ - private String overrideCatalogSpec; - - /** - * Default single-property definition, read from the release file. Lower priority than separated - * release file properties. - */ - private String defaultCatalogSpec; - - private GraalEdition defaultEdition; - - private boolean remoteSourcesAllowed = true; - - private List localSources = new ArrayList<>(); - - /** - * Compares property keys so that software sources can be ordered. It tries to numeric-order - * according to the substring after {@code component_catalog_} prefix ( - * {@link CommonConstants#CAP_CATALOG_PREFIX}; strings having lower precedence than any any - * number. Two nonnumeric strings are compared alphabetically. - */ - private static final Comparator CHANNEL_KEY_COMPARATOR = new Comparator<>() { - @Override - public int compare(String o1, String o2) { - int i1 = Integer.MAX_VALUE; - int i2 = Integer.MAX_VALUE; - - String k1 = o1.substring(CommonConstants.CAP_CATALOG_PREFIX.length() - 1); - String k2 = o2.substring(CommonConstants.CAP_CATALOG_PREFIX.length() - 1); - if (k1.equals("")) { - i1 = 0; - } else { - if (k1.startsWith("_")) { - k1 = k1.substring(1); - } - try { - i1 = Integer.parseInt(k1); - } catch (NumberFormatException ex) { - } - } - if (k2.equals("")) { - i2 = 0; - } else { - if (k2.startsWith("_")) { - k2 = k2.substring(1); - } - try { - i2 = Integer.parseInt(k2); - } catch (NumberFormatException ex) { - } - } - if (i1 != i2) { - return i1 - i2; - } - return k1.compareToIgnoreCase(k2); - } - }; - - public GraalEditionList(Feedback feedback, CommandInput input, ComponentRegistry reg) { - this.input = input; - this.targetGraal = reg; - this.feedback = feedback.withBundle(GraalEditionList.class); - } - - public String getOverrideCatalogSpec() { - return overrideCatalogSpec; - } - - public void setOverrideCatalogSpec(String overrideCatalogSpec) { - this.overrideCatalogSpec = overrideCatalogSpec; - } - - public String getDefaultCatalogSpec() { - return defaultCatalogSpec; - } - - public void setDefaultCatalogSpec(String defaultCatalogSpec) { - this.defaultCatalogSpec = defaultCatalogSpec; - } - - /** - * Returns the default GraalVM edition. - * - * @return default edition. - */ - public GraalEdition getDefaultEdition() { - init(); - return defaultEdition; - } - - public void setDefaultEdition(GraalEdition ed) { - this.defaultEdition = ed; - } - - /** - * Lists all editions. - * - * @return list of editions, the default one first. - */ - public List editions() { - init(); - return editions; - } - - /** - * Gets an edition with the specified ID. Throws an exception, if that edition does not exist. - * - * @param id edition id. "" or null means default edition. - * @return edition instance - * @throws FailedOperationException if no such edition is configured. - */ - public GraalEdition getEdition(String id) { - if (id == null || "".equals(id)) { - return getDefaultEdition(); - } else { - init(); - GraalEdition e = editionMap.get(id.toLowerCase(Locale.ENGLISH)); - if (e == null) { - throw feedback.failure("ERR_NoSuchEdition", null, id); - } - return e; - } - } - - @SuppressWarnings("ThrowableResultIgnored") - List parseChannelSources(String edId, String overrideSpec) { - List sources = new ArrayList<>(); - if (!remoteSourcesAllowed || overrideSpec == null) { - return sources; - } - int priority = 1; - String[] parts = overrideSpec.split("\\|"); // NOI18N - String id = edId; - if (id == null) { - id = targetGraal.getGraalCapabilities().get(CommonConstants.CAP_EDITION); - } - for (String s : parts) { - SoftwareChannelSource chs = new SoftwareChannelSource(s); - chs.setPriority(priority); - chs.setParameter("edition", id); - sources.add(chs); - priority++; - } - return sources; - } - - void parseSimpleSpecification(String defId, String spec) { - if (spec == null) { - return; - } - String[] eds = spec.split("\\{"); - for (String part : eds) { - if ("".equals(part)) { - continue; - } - String edName; - String edId; - - String src = part; - int endBracket = part.indexOf('}'); - if (endBracket != -1) { - int eqSign = part.indexOf('='); - if (eqSign == -1 || eqSign >= endBracket) { - edId = edName = part.substring(0, endBracket); - } else { - edId = part.substring(0, eqSign); - edName = part.substring(eqSign + 1, endBracket); - } - src = part.substring(endBracket + 1).trim(); - if (src.endsWith("|")) { - src = src.substring(0, src.length() - 1); - } - } else { - edId = defId != null ? defId : "ce"; - edName = getEditionLabel(edId); - if (edName == null) { - edName = getEditionLabel(null); - } - } - GraalEdition ge = new GraalEdition(edId, edName); - boolean def = false; - ge.setSoftwareSources(parseChannelSources(edId, src)); - if (defaultEdition == null && endBracket == -1) { - def = true; - } else if (edId.equals(defId)) { - def = true; - } - registerEdition(ge, def); - } - } - - /** - * @return true, if an explicit override is present. - */ - boolean isExplicitOverride() { - return overrideCatalogSpec != null; - } - - void init() { - if (defaultEdition != null) { - return; - } - String defEditionId = targetGraal.getGraalCapabilities().get(CommonConstants.CAP_EDITION); - - if (isExplicitOverride()) { - initSimple(defEditionId, overrideCatalogSpec); - return; - } - List srcs = readChannelSources(defEditionId); - if (srcs.isEmpty()) { - // no source channels defined for the editionId - srcs = readChannelSources(null); - } - - if (srcs.isEmpty()) { - initSimple(defEditionId, defaultCatalogSpec); - return; - } - List edList = listEditionsFromRelease(); - String label; - List sources; - - if (edList.contains(defEditionId)) { - edList.remove(defEditionId); - label = getEditionLabel(defEditionId); - sources = readChannelSources(defEditionId); - } else if (!edList.remove("")) { - throw new IllegalStateException("Malformed release file."); - } else { - label = getEditionLabel(null); - sources = readChannelSources(null); - } - GraalEdition ge = new GraalEdition(defEditionId, label); - ge.setSoftwareSources(sources); - registerEdition(ge, true); - for (String id : edList) { - label = getEditionLabel(id); - sources = readChannelSources(id); - ge = new GraalEdition(id, label); - ge.setSoftwareSources(sources); - - registerEdition(ge, false); - } - } - - private void registerEdition(GraalEdition ge, boolean defaultEd) { - if (!editions.contains(ge)) { - editions.add(ge); - } - if (defaultEd) { - editionMap.put("", ge); - defaultEdition = ge; - } - editionMap.put(ge.getId().toLowerCase(Locale.ENGLISH), ge); - } - - /** - * Regexp to select individual edition's properties from the release file. The property must - * start with the edition id, separated by {@code "_"}) from the normal property prefix ( - * {@code component_catalog_}), followed by individual attributes of the software source - * definition. Since URL is the only mandatory attribute, the regexp looks for that. - */ - private static final String EDITION_MATCH_REGEXP = "(?:([^_]+)_)?component_catalog(_?.*)_url"; // NOI18N - - private List listEditionsFromRelease() { - Map editionOrder = new HashMap<>(); - addEditions( - editionOrder, - targetGraal.getGraalCapabilities(), - Pattern.compile(EDITION_MATCH_REGEXP)); - addEditions( - editionOrder, - lowercaseMap(input.parameters(false)), - Pattern.compile(CommonConstants.ENV_CATALOG_PREFIX.toLowerCase(Locale.ENGLISH) + EDITION_MATCH_REGEXP)); - List editionIds = new ArrayList<>(editionOrder.keySet()); - Collections.sort(editionIds, (a, b) -> CHANNEL_KEY_COMPARATOR.compare(editionOrder.get(a), editionOrder.get(b))); - return editionIds; - } - - private static void addEditions(Map eds, Map params, Pattern match) { - for (String k : params.keySet()) { - Matcher m = match.matcher(k); - if (m.matches()) { - String id = m.group(1); - if (null == id) { - id = ""; // NOI18N - } - eds.putIfAbsent(id, k); - } - } - } - - private void ensureDefaultDefined(String defEditionId) { - GraalEdition ge; - if (editions.isEmpty()) { - String label = getEditionLabel(defEditionId); - ge = new GraalEdition(defEditionId == null ? "" : defEditionId, label); - } else if (defaultEdition == null) { - ge = editions.get(0); - } else { - ge = defaultEdition; - } - registerEdition(ge, true); - } - - /** - * Performs single-property initialization. - * - * @param defEditionId default edition's ID, as it appears (or defaults) in the release file. - * @param spec specification string. - */ - private void initSimple(String defEditionId, String spec) { - parseSimpleSpecification(defEditionId, spec); - if (editions.isEmpty()) { - String label = getEditionLabel(defEditionId); - GraalEdition ge = new GraalEdition(defEditionId, label); - defaultEdition = ge; - editions.add(ge); - } - foreignGraals.put(targetGraal, this); - ensureDefaultDefined(defEditionId); - } - - String getEditionLabel(String id) { - String readPrefix = id == null ? "" : id + "_"; - String key = readPrefix + CommonConstants.CAP_CATALOG_PREFIX + "editionLabel"; - String label = input.getParameter(CommonConstants.ENV_VARIABLE_PREFIX + key.toUpperCase(Locale.ENGLISH), false); - if (label == null) { - label = targetGraal.getGraalCapabilities().get(key); - } - if (label == null) { - label = targetGraal.getGraalCapabilities().get(CommonConstants.CAP_EDITION); - if (label == null) { - if ("".equals(id) || id == null) { - return "CE"; // NOI18N - } else { - return id.toUpperCase(Locale.ENGLISH); - } - } else { - return label.toUpperCase(Locale.ENGLISH); - } - } - return label; - } - - public boolean isRemoteSourcesAllowed() { - return remoteSourcesAllowed; - } - - public void setRemoteSourcesAllowed(boolean remoteSourcesAllowed) { - this.remoteSourcesAllowed = remoteSourcesAllowed; - } - - private static Map lowercaseMap(Map map) { - Map res = new HashMap<>(); - for (String s : map.keySet()) { - res.put(s.toLowerCase(Locale.ENGLISH), map.get(s)); - } - return res; - } - - List readChannelSources(String editionPrefix) { - List res; - String readPrefix = editionPrefix == null ? "" : editionPrefix + "_"; - Map lcEnv = lowercaseMap(input.parameters(false)); - res = readChannelSources(editionPrefix, CommonConstants.ENV_VARIABLE_PREFIX.toLowerCase(Locale.ENGLISH) + readPrefix, lcEnv); - if (res != null && !res.isEmpty()) { - return res; - } - if (remoteSourcesAllowed) { - return readChannelSources(editionPrefix, readPrefix, input.getLocalRegistry().getGraalCapabilities()); // NOI18N - } else { - List l = new ArrayList<>(); - return l; - } - } - - List readChannelSources(String id, String pref, Map graalCaps) { - List sources = new ArrayList<>(); - if (!remoteSourcesAllowed) { - return sources; - } - String prefix = pref + CommonConstants.CAP_CATALOG_PREFIX; - List orderedKeys = graalCaps.keySet().stream().filter((k) -> { - String lk = k.toLowerCase(Locale.ENGLISH); - return lk.startsWith(prefix) && lk.endsWith(CAP_CATALOG_URL_SUFFIX); - }).map((k) -> k.substring(0, k.length() - CAP_CATALOG_URL_SUFFIX.length())).collect(Collectors.toList()); - Collections.sort(orderedKeys, CHANNEL_KEY_COMPARATOR); - - int priority = 0; - for (String key : orderedKeys) { - String url = graalCaps.get(key + CAP_CATALOG_URL_SUFFIX); - String lab = graalCaps.get(key + "_" + CommonConstants.CAP_CATALOG_LABEL); - if (url == null) { - continue; - } - SoftwareChannelSource s = new SoftwareChannelSource(url, lab); - s.setPriority(priority); - for (String a : graalCaps.keySet()) { - if (!(a.startsWith(key) && a.length() > key.length() + 1)) { - continue; - } - String k = a.substring(key.length() + 1).toLowerCase(Locale.ENGLISH); - switch (k) { - case CommonConstants.CAP_CATALOG_LABEL: - case CommonConstants.CAP_CATALOG_URL: - continue; - } - s.setParameter(k, graalCaps.get(a)); - } - if (s.getParameter("edition") == null) { - s.setParameter("edition", id != null ? id : targetGraal.getGraalCapabilities().get(CommonConstants.CAP_EDITION)); - } - - sources.add(s); - priority++; - } - return sources; - } - - RemoteCatalogDownloader createEditionDownloader(GraalEdition edition) { - GraalEdition ed = edition; - if (ed == null) { - ed = defaultEdition; - } - RemoteCatalogDownloader dn = new RemoteCatalogDownloader(input, feedback, overrideCatalogSpec); - Stream.concat(ed.getSoftwareSources().stream(), localSources.stream()).forEach(dn::addLocalChannelSource); - // FIXME: temporary hack, remember to cleanup RemoteCatalogDownloader from debris, most of - // functionality - // has moved here. - dn.setRemoteSourcesAllowed(false); - return dn; - } - - public void addLocalChannelSource(SoftwareChannelSource src) { - src.setParameter("reportErrors", Boolean.FALSE.toString()); - localSources.add(src); - } - - final class GE extends GraalEdition { - GE(String id, String displayName) { - super(id, displayName); - } - - @Override - public SoftwareChannel getCatalogProvider() { - SoftwareChannel ch = super.getCatalogProvider(); - if (ch == null) { - ch = createEditionDownloader(this); - setCatalogProvider(ch); - } - return ch; - } - } - - GraalEditionList listGraalEditions(CommandInput in, ComponentRegistry otherGraal) { - return foreignGraals.computeIfAbsent(otherGraal, (og) -> { - GraalEditionList gl = new GraalEditionList(feedback, in, og); - gl.setRemoteSourcesAllowed(remoteSourcesAllowed); - String defCatalog = og.getGraalCapabilities().get(CommonConstants.RELEASE_CATALOG_KEY); - gl.setDefaultCatalogSpec(defCatalog); - return gl; - }); - } - - /** - * Cached instance of catalog, the storage tracks origin of supplied ComponentInfos. - */ - private ComponentCatalog catalog; - - @Override - public ComponentCatalog createComponentCatalog(CommandInput in) { - ComponentRegistry targetGraalVM = in.getLocalRegistry(); - if (targetGraalVM != this.targetGraal) { - GraalEditionList gl = listGraalEditions(in, targetGraalVM); - return gl.createComponentCatalog(in); - } - if (catalog != null) { - return catalog; - } - String edId = in.optValue(Commands.OPTION_USE_EDITION, ""); - GraalEdition ge = getEdition(edId); - RemoteCatalogDownloader downloader = createEditionDownloader(ge); - CatalogContents col = new CatalogContents(feedback, downloader.getStorage(), targetGraalVM); - return catalog = col; - } - - @Override - public List listEditions(ComponentRegistry targetGraalVM) { - return editions(); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/MergeStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/MergeStorage.java deleted file mode 100644 index 0ba1a49cfe8c..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/MergeStorage.java +++ /dev/null @@ -1,197 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.graalvm.component.installer.ComponentCatalog; -import org.graalvm.component.installer.FailedOperationException; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.IncompatibleException; -import org.graalvm.component.installer.InstallerStopException; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.persist.AbstractCatalogStorage; -import org.graalvm.component.installer.persist.MetadataLoader; - -/** - * The Storage merges storages of individual providers. - * - * @author sdedic - */ -public class MergeStorage extends AbstractCatalogStorage implements ComponentCatalog.DownloadInterceptor { - private final Map channelMap = new HashMap<>(); - private final List channels = new ArrayList<>(); - private final Map channelInfos = new HashMap<>(); - - private boolean ignoreCatalogErrors; - private boolean acceptAllSources = true; - - public MergeStorage(ComponentRegistry localRegistry, Feedback feedback) { - super(localRegistry, feedback, null); - } - - public boolean isAcceptAllSources() { - return acceptAllSources; - } - - public void setAcceptAllSources(boolean acceptAllSources) { - this.acceptAllSources = acceptAllSources; - } - - public void addChannel(SoftwareChannelSource info, SoftwareChannel delegate) { - channels.add(delegate); - channelInfos.put(delegate, info); - } - - public boolean isIgnoreCatalogErrors() { - return ignoreCatalogErrors; - } - - public void setIgnoreCatalogErrors(boolean ignoreCatalogErrors) { - this.ignoreCatalogErrors = ignoreCatalogErrors; - } - - private void reportError(Exception exc, SoftwareChannel errChannel) { - if (exc == null) { - return; - } - // the previous error is overwritten, so at least report it before it is - // forgot: - SoftwareChannelSource info = channelInfos.get(errChannel); - String l = info.getLabel(); - if (l == null) { - l = info.getLocationURL(); - } - feedback.error("REMOTE_CannotLoadChannel", exc, l, exc.getLocalizedMessage()); - } - - private boolean idsLoaded; - - @Override - public Set listComponentIDs() throws IOException { - Set ids = new HashSet<>(); - List savedEx = new ArrayList<>(); - List errChannels = new ArrayList<>(); - boolean oneSucceeded = false; - Exception toThrow = null; - for (SoftwareChannel del : new ArrayList<>(channels)) { - try { - ids.addAll(del.getStorage().listComponentIDs()); - oneSucceeded = true; - } catch (IncompatibleException ex) { - savedEx.add(ex); - errChannels.add(del); - channels.remove(del); - } catch (IOException | FailedOperationException ex) { - if (!isIgnoreCatalogErrors()) { - throw ex; - } - if (!idsLoaded) { - reportError(ex, del); - } - toThrow = ex; - channels.remove(del); - } - } - if (!oneSucceeded || ids.isEmpty()) { - for (int i = 0; i < savedEx.size(); i++) { - reportError(toThrow = savedEx.get(i), errChannels.get(i)); - } - if (toThrow instanceof IOException) { - throw (IOException) toThrow; - } else if (toThrow != null) { - throw (InstallerStopException) toThrow; - } - } - idsLoaded = true; - return ids; - } - - List getChannels() { - return channels; - } - - private int getChannelPriority(SoftwareChannel ch) { - SoftwareChannelSource src = this.channelInfos.get(ch); - if (src != null) { - return src.getPriority(); - } else { - int index = channels.indexOf(ch); - return index == -1 ? 0 : index; - } - } - - @Override - public Set loadComponentMetadata(String id) throws IOException { - Set cis = new HashSet<>(); - for (SoftwareChannel swch : channels) { - Set newInfos = swch.getStorage().loadComponentMetadata(id); - if (newInfos == null || newInfos.isEmpty()) { - continue; - } - if (!acceptAllSources) { - newInfos.removeAll(cis); - } - for (ComponentInfo ci : newInfos) { - ci.setPriority(getChannelPriority(swch)); - channelMap.putIfAbsent(ci, swch); - } - cis.addAll(newInfos); - if (!acceptAllSources) { - break; - } - } - return cis; - } - - public SoftwareChannel getOrigin(ComponentInfo ci) { - return channelMap.get(ci); - } - - @Override - public FileDownloader processDownloader(ComponentInfo info, FileDownloader dn) { - SoftwareChannel orig = getOrigin(info); - return orig != null ? orig.configureDownloader(info, dn) : dn; - } - - @Override - public MetadataLoader interceptMetadataLoader(ComponentInfo info, MetadataLoader delegate) { - SoftwareChannel orig = getOrigin(info); - if (orig instanceof ComponentCatalog.DownloadInterceptor) { - return ((ComponentCatalog.DownloadInterceptor) orig).interceptMetadataLoader(info, delegate); - } else { - return delegate; - } - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/ProxyConnectionFactory.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/ProxyConnectionFactory.java deleted file mode 100644 index 7607cdd0fcf0..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/ProxyConnectionFactory.java +++ /dev/null @@ -1,552 +0,0 @@ -/* - * Copyright (c) 2018, 2022, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.IOException; -import java.net.ConnectException; -import java.net.HttpURLConnection; -import java.net.InetSocketAddress; -import java.net.Proxy; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; -import java.util.regex.Pattern; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.URLConnectionFactory; -import java.io.BufferedReader; -import java.io.InputStreamReader; - -/** - * Creates URLConnections to the given destination. Caches the decision about proxy. For the first - * {@link #openConnection(java.net.URI, org.graalvm.component.installer.URLConnectionFactory.Configure)}, - * the code wil open - *
    - *
  • a direct connection to the proxy - *
  • a connection through http proxy, if configured - *
  • a connection through https proxy, if configured - *
- * Users may forget to set both the http/https proxies, so the code will attempt to use whetaver is - * known. All those connections will attempt to connect to the destination. The first connection - * attempt that succeeds will be used. The mechanism (proxy setting, direct) that established the - * connection will be cached for subsequent requests to the same authority. Additional requests to - * the same location should not open additional probes then. - *

- * The factory is caching threads; initially at most 3 threads will be created for probes, then each - * request will reuse a thread from the thread pool (to watch time out the operation on the main - * thread). - * - * @author sdedic - */ -public class ProxyConnectionFactory implements URLConnectionFactory { - /** - * The max delay to connect to the final destination or open a proxy connection. In seconds. - */ - private static final int DEFAULT_CONNECT_DELAY = Integer.getInteger("org.graalvm.component.installer.connectDelaySec", 10); - - /** - * Delay in the case proxies are not used. Heuristics is not used at all, so the connection time - * may be longer. In seconds. - */ - private static final int DEFAULT_DIRECT_CONNECT_DELAY = Integer.getInteger("org.graalvm.component.installer.directConnectDelaySec", 20); - - private static final String PROXY_SCHEME_PREFIX = "http://"; // NOI18N - - private final Feedback feedback; - private final URL urlBase; - - // @GuardedBy(this) - private Connector winningConnector; - - /** - * Thread pool for connection attempts. Subsequent connections do not send unnecessary probes, - * but are done in a thread so the main thread may time out the operation. Most likely the - * threads will be allocated from this pool. - */ - private final ExecutorService connectors = Executors.newCachedThreadPool(); - - /** - * HTTP proxy settings. The default is taken from system environment variables and system - * property - */ - String envHttpProxy = System.getProperty("http_proxy", System.getenv("http_proxy")); // NOI18N - - /** - * HTTPS proxy settings. The default is taken from system environment variables and system - * property - */ - String envHttpsProxy = System.getProperty("https_proxy", System.getenv("https_proxy")); // NOI18N - - /** - * The configurable delay for this factory. Initialized to {@link #DEFAULT_CONNECT_DELAY}. - */ - private int connectDelay = DEFAULT_CONNECT_DELAY; - - private int directConnectDelay = DEFAULT_DIRECT_CONNECT_DELAY; - - public ProxyConnectionFactory(Feedback feedback, URL urlBase) { - this.feedback = feedback.withBundle(ProxyConnectionFactory.class); - this.urlBase = urlBase; - } - - /** - * Customizes connection timeouts. Base delay must be at least 0 (infinite wait). If the direct - * delay is negative, it is scaled from base delay using the same factor as the default timeouts - * - * @param delay base delay, 0 for infinite wait. Must not be negative - * @param directDelay single connection delay, negative to derive from the base delay - */ - public void setConnectDelay(int delay, int directDelay) { - if (delay < 0) { - throw new IllegalArgumentException(); - } - this.connectDelay = delay; - if (directDelay >= 0) { - this.directConnectDelay = directDelay; - } else { - // scale the base delay by the default connection factor - float factor = Math.min(1, ((float) DEFAULT_DIRECT_CONNECT_DELAY / DEFAULT_CONNECT_DELAY)); - this.directConnectDelay = Math.round(delay * factor); - } - } - - /** - * Scales the default timeouts by some factor. - * - * @param factor factor to scale the default timeouts. - */ - public void setConnectDelayFactor(float factor) { - this.connectDelay = Math.round(DEFAULT_CONNECT_DELAY * factor); - this.directConnectDelay = Math.round(DEFAULT_DIRECT_CONNECT_DELAY * factor); - } - - public ProxyConnectionFactory setProxy(boolean secure, String proxyURI) { - if (secure) { - envHttpsProxy = proxyURI; - } else { - envHttpProxy = proxyURI; - } - return this; - } - - public URLConnection openConnection(URI relative, Configure configCallback) throws IOException { - if (relative != null) { - try { - return openConnectionWithProxies(urlBase.toURI().resolve(relative).toURL(), configCallback); - } catch (URISyntaxException ex) { - throw new IOException(ex); - } - } else { - return openConnectionWithProxies(urlBase, configCallback); - } - } - - private class ConnectionContext { - private final Configure configCallback; - private final CountDownLatch countDown; - private final URL url; - private final List tryConnectors = new ArrayList<>(); - - // @GuardedBy(this) - private Connector winner; - // @GuardedBy(this) - private URLConnection openedConnection; - // @GuardedBy(this) - private IOException exProxy; - // @GuardedBy(this) - private IOException exDirect; - // @GuardedBy(this); - private int outcomes; - - ConnectionContext(URL url, Configure configCallback, CountDownLatch latch) { - this.configCallback = configCallback; - this.countDown = latch; - this.url = url; - } - - synchronized URLConnection getConnection() throws IOException { - if (openedConnection == null) { - if (exDirect != null) { - throw exDirect; - } else if (exProxy != null) { - throw exProxy; - } - throw new ConnectException(feedback.l10n("EXC_CannotConnectTo", url)); - } else { - return openedConnection; - } - } - - boolean setOutcome(Connector w, URLConnection opened) { - synchronized (this) { - if (winner != null) { - return false; - } - winner = w; - openedConnection = opened; - } - if (countDown != null) { - countDown.countDown(); - } - return true; - } - - void setOutcome(boolean direct, IOException e) { - synchronized (this) { - if (direct) { - exDirect = e; - } else { - exProxy = e; - } - if (++outcomes == tryConnectors.size()) { - countDown.countDown(); - } - } - } - - synchronized IOException getConnectException() { - if (exDirect != null) { - return exDirect; - } else if (exProxy != null) { - return exProxy; - } - return new ConnectException(feedback.l10n("EXC_TimeoutConnectTo", url)); - } - - synchronized void submit(Connector c) { - tryConnectors.add(c); - } - - void start() { - for (Connector c : tryConnectors) { - connectors.submit(c); - } - } - } - - /** - * Regexp to detect a scheme-like part. See https://tools.ietf.org/html/rfc3986#section-3.1. - */ - private static final Pattern SCHEME_REGEXP = Pattern.compile("^\\p{Alpha}[\\p{Alnum}+-.]*:", Pattern.CASE_INSENSITIVE); // NOI18N - - public static InetSocketAddress proxyAddress(String proxySpec) throws URISyntaxException { - if (proxySpec == null) { - return null; - } - String trimmed = proxySpec.trim(); - if ("".equals(trimmed)) { - return null; - } - // the URI is created just to parse the proxy specification. It won't be - // actually used as a whole to form URL or open connection - URI uri; - - try { - uri = new URI(trimmed); - } catch (URISyntaxException ex) { - // maybe the user did not include the http:// in the address spec. - if (SCHEME_REGEXP.matcher(trimmed).find()) { - // something that could be a scheme is already in, but still won't parse - throw ex; - } - try { - trimmed = PROXY_SCHEME_PREFIX + trimmed; - uri = new URI(trimmed); - } catch (URISyntaxException ex2) { - // no luck, throw the original exception: - throw ex; - } - if (uri.getHost() == null || uri.getPort() < 1) { - throw ex; - } - } - - // if the user forgets the scheme (http://) the string is misparsed and hostname - // becomes the scheme while the host part will be empty. Adding the "http://" in - // front - // fixes parsing at least for the host/port part. - if (uri.getScheme() == null || uri.getHost() == null) { - URI checkURI = null; - try { - checkURI = new URI(PROXY_SCHEME_PREFIX + trimmed); - if (!(checkURI.getHost() == null || checkURI.getPort() < 1)) { - uri = checkURI; - } - } catch (URISyntaxException ex) { - // better leave the specified value without the scheme. - } - } - InetSocketAddress address = InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort()); - return address; - } - - final class Connector implements Runnable { - private final InetSocketAddress proxyAddress; - private URL url; - private ConnectionContext context; - - Connector(InetSocketAddress address) { - this.proxyAddress = address; - } - - InetSocketAddress getProxyAddress() { - return proxyAddress; - } - - boolean isDirect() { - return proxyAddress == null; - } - - boolean accepts(URL u) { - synchronized (this) { - return Objects.equals(u.getAuthority(), url.getAuthority()); - } - } - - Connector bind(ConnectionContext ctx) { - synchronized (this) { - context = ctx; - url = ctx.url; - } - return this; - } - - @Override - public void run() { - ConnectionContext ctx; - - synchronized (this) { - ctx = context; - context = null; - } - runWithContext(ctx); - } - - void runWithContext(ConnectionContext ctx) { - final Proxy proxy; - if (isDirect()) { - proxy = null; - } else { - proxy = new Proxy(Proxy.Type.HTTP, proxyAddress); - } - Configure configCallback = ctx.configCallback; - boolean won = false; - URLConnection test = null; - try { - test = proxy == null ? url.openConnection() : url.openConnection(proxy); - if (configCallback != null) { - configCallback.accept(test); - } - test.connect(); - if (test instanceof HttpURLConnection) { - HttpURLConnection htest = (HttpURLConnection) test; - int rcode = htest.getResponseCode(); - // using bad request 400 as a marker. All 4xx, 5xx codes should be handled this - // way to force - // the appropriate exception out. - if (rcode >= HttpURLConnection.HTTP_BAD_REQUEST) { - // force the exception, should fail with IOException - try { - htest.getInputStream().close(); - } catch (IOException ex) { - throw new HttpConnectionException(ex.getMessage(), ex, isDirect(), htest); - } - if (!isDirect()) { // this should not happen - throw new IOException(feedback.l10n("EXC_ProxyFailed", rcode)); - } - } - } - won = ctx.setOutcome(this, test); - } catch (IOException ex) { - ctx.setOutcome(isDirect(), ex); - } finally { - if (!won) { - if (test instanceof HttpURLConnection) { - ((HttpURLConnection) test).disconnect(); - } - } - } - } - } - - public static class HttpConnectionException extends IOException { - private static final long serialVersionUID = 1L; - private final boolean isDirect; - private final int retCode; - private final URL connectionUrl; - private final String response; - - public HttpConnectionException(String message, IOException cause, boolean isDirect, HttpURLConnection connection) throws IOException { - super(message, cause); - this.response = parseErrorResponse(connection); - this.retCode = connection.getResponseCode(); - this.connectionUrl = connection.getURL(); - this.isDirect = isDirect; - } - - private static String parseErrorResponse(HttpURLConnection connection) { - try (BufferedReader br = new BufferedReader(new InputStreamReader(connection.getErrorStream()))) { - return br.lines().reduce((s1, s2) -> s1 + "\n" + s2).orElse(""); - } catch (IOException t) { - return t.getLocalizedMessage(); - } - } - - public int getRetCode() { - return retCode; - } - - public String getResponse() { - return response; - } - - public URL getConnectionUrl() { - return connectionUrl; - } - - public boolean isProxy() { - return isDirect; - } - } - - List makeConnectors(String httpProxy, String httpsProxy) { - InetSocketAddress httpProxyAddress = null; - InetSocketAddress httpsProxyAddress = null; - - URISyntaxException httpError = null; - URISyntaxException httpsError = null; - - if (httpProxy != null) { - try { - httpProxyAddress = proxyAddress(httpProxy); - } catch (URISyntaxException ex) { - httpError = ex; - } - } - if (httpsProxy != null) { - if (!Objects.equals(httpProxy, httpsProxy)) { - try { - httpsProxyAddress = proxyAddress(httpsProxy); - } catch (URISyntaxException ex) { - httpsError = ex; - } - } - } - List tryConnectors = new ArrayList<>(); - - if (httpProxyAddress != null) { - tryConnectors.add(new Connector(httpProxyAddress)); - } - // do not attempt 2nd probe try if http+https are set to the same value. - if (httpsProxyAddress != null) { - tryConnectors.add(new Connector(httpsProxyAddress)); - } - - // something is there, but an error happened - if (httpError != null) { - feedback.error("WARN_HttpProxyGarbage", httpError, httpProxy); - } - if (httpsError != null) { - feedback.error("WARN_HttpsProxyGarbage", httpError, httpProxy); - } - if (tryConnectors.isEmpty()) { - // let the native support do its magic: - System.setProperty("java.net.useSystemProxies", "true"); - } - tryConnectors.add(new Connector(null)); - return tryConnectors; - } - - private URLConnection openConnectionWithProxies(URL url, Configure configCallback) throws IOException { - final CountDownLatch connected = new CountDownLatch(1); - String httpProxy; - String httpsProxy; - - Connector winner; - ConnectionContext ctx = new ConnectionContext(url, configCallback, connected); - - synchronized (this) { - httpProxy = envHttpProxy; - httpsProxy = envHttpsProxy; - winner = winningConnector; - } - - boolean haveProxy = false; - - // reuse the same detected direct / proxy for matching URLs. - if (winner != null && winner.accepts(url)) { - winner.bind(ctx); - // submit the winner so we can also recover from long connect delays - ctx.submit(winner); - // note: the winner will benefit from larger timeout as it is just one - // connection - } else { - List newConnectors = makeConnectors(httpProxy, httpsProxy); - haveProxy = newConnectors.size() > 1; - newConnectors.forEach(c -> ctx.submit(c.bind(ctx))); - } - - ctx.start(); - - int shouldDelay = haveProxy ? connectDelay : directConnectDelay; - - URLConnection res = null; - - try { - if (shouldDelay > 0) { - if (!connected.await(shouldDelay, TimeUnit.SECONDS)) { - throw ctx.getConnectException(); - } else { - // may also throw exception - res = ctx.getConnection(); - } - } else { - // wait indefinitely ... until network times out. - connected.await(); - res = ctx.getConnection(); - } - } catch (InterruptedException ex) { - throw new ConnectException(feedback.l10n("EXC_InterruptedConnectingTo", url)); - } - return res; - } - - @Override - public URLConnection createConnection(URL u, Configure configCallback) throws IOException { - try { - return openConnection(u.toURI(), configCallback); - } catch (URISyntaxException ex) { - throw new IOException(ex); - } - } - -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemoteCatalogDownloader.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemoteCatalogDownloader.java deleted file mode 100644 index ca7e95158b6f..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemoteCatalogDownloader.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.net.URL; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.ServiceLoader; -import java.util.stream.Collectors; -import org.graalvm.component.installer.model.CatalogContents; -import org.graalvm.component.installer.CommandInput; -import org.graalvm.component.installer.Commands; -import org.graalvm.component.installer.CommonConstants; -import org.graalvm.component.installer.ComponentCollection; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SoftwareChannel; -import org.graalvm.component.installer.SoftwareChannelSource; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentStorage; - -public class RemoteCatalogDownloader implements SoftwareChannel { - private final CommandInput input; - private final Feedback feedback; - - private Iterable factories; - private List channelSources = new ArrayList<>(); - private CatalogContents union; - private String overrideCatalogSpec; - private String defaultCatalogSpec; - private boolean catalogURLParsed; - private boolean remoteSourcesAllowed = true; - - public RemoteCatalogDownloader(CommandInput in, Feedback out, String overrideCatalogSpec) { - this.input = in; - this.feedback = out.withBundle(RemoteCatalogDownloader.class); - this.overrideCatalogSpec = overrideCatalogSpec; - this.factories = ServiceLoader.load(SoftwareChannel.Factory.class); - } - - // tests only - public RemoteCatalogDownloader(CommandInput in, Feedback out, URL catalogURL) { - this(in, out, catalogURL == null ? null : catalogURL.toString()); - } - - public void addLocalChannelSource(SoftwareChannelSource src) { - src.setParameter("reportErrors", Boolean.FALSE.toString()); - channelSources.add(src); - } - - public void setRemoteSourcesAllowed(boolean remoteSourcesAllowed) { - this.remoteSourcesAllowed = remoteSourcesAllowed; - } - - public boolean isRemoteSourcesAllowed() { - return remoteSourcesAllowed; - } - - // for testing only - void setChannels(Iterable chan) { - this.factories = chan; - } - - public void setDefaultCatalog(String defaultCatalogSpec) { - this.defaultCatalogSpec = defaultCatalogSpec; - } - - public String getOverrideCatalogSpec() { - return overrideCatalogSpec; - } - - private MergeStorage mergedStorage; - - static final String CAP_CATALOG_URL_SUFFIX = "_" + CommonConstants.CAP_CATALOG_URL; // NOI18N - - @SuppressWarnings("ThrowableResultIgnored") - List parseChannelSources(String overrideSpec) { - List sources = new ArrayList<>(); - if (overrideSpec == null) { - return sources; - } - String[] parts = overrideSpec.split("\\|"); // NOI18N - for (String s : parts) { - sources.add(new SoftwareChannelSource(s)); // NOI18N - } - return sources; - } - - List getChannelSources() { - if (catalogURLParsed) { - return channelSources; - } - List sources = Collections.emptyList(); - if (remoteSourcesAllowed) { - if (overrideCatalogSpec != null) { - sources = parseChannelSources(overrideCatalogSpec); - } else { - sources = readChannelSources(); - if (sources.isEmpty()) { - sources = parseChannelSources(defaultCatalogSpec); - } - } - } - channelSources.addAll(0, sources); - catalogURLParsed = true; - return channelSources; - } - - private static final Comparator CHANNEL_KEY_COMPARATOR = new Comparator<>() { - @Override - public int compare(String o1, String o2) { - String k1 = o1.substring(CommonConstants.CAP_CATALOG_PREFIX.length()); - String k2 = o2.substring(CommonConstants.CAP_CATALOG_PREFIX.length()); - int i1 = Integer.MAX_VALUE; - int i2 = Integer.MAX_VALUE; - try { - i1 = Integer.parseInt(k1); - } catch (NumberFormatException ex) { - } - try { - i2 = Integer.parseInt(k2); - } catch (NumberFormatException ex) { - } - if (i1 != i2) { - return i1 - i2; - } - return k1.compareToIgnoreCase(k2); - } - }; - - private static Map lowercaseMap(Map map) { - Map res = new HashMap<>(); - for (String s : map.keySet()) { - res.put(s.toLowerCase(Locale.ENGLISH), map.get(s)); - } - return res; - } - - List readChannelSources(String pref, Map graalCaps) { - String prefix = pref + CommonConstants.CAP_CATALOG_PREFIX; - List orderedKeys = graalCaps.keySet().stream().filter((k) -> { - String lk = k.toLowerCase(Locale.ENGLISH); - return lk.startsWith(prefix) && lk.endsWith(CAP_CATALOG_URL_SUFFIX); - }).map((k) -> k.substring(0, k.length() - CAP_CATALOG_URL_SUFFIX.length())).collect(Collectors.toList()); - Collections.sort(orderedKeys, CHANNEL_KEY_COMPARATOR); - - List sources = new ArrayList<>(); - for (String key : orderedKeys) { - String url = graalCaps.get(key + CAP_CATALOG_URL_SUFFIX); - String lab = graalCaps.get(key + "_" + CommonConstants.CAP_CATALOG_LABEL); - if (url == null) { - continue; - } - SoftwareChannelSource s = new SoftwareChannelSource(url, lab); - for (String a : graalCaps.keySet()) { - if (!(a.startsWith(key) && a.length() > key.length() + 1)) { - continue; - } - String k = a.substring(key.length() + 1).toLowerCase(Locale.ENGLISH); - switch (k) { - case CommonConstants.CAP_CATALOG_LABEL: - case CommonConstants.CAP_CATALOG_URL: - continue; - } - s.setParameter(k, graalCaps.get(a)); - } - - sources.add(s); - } - return sources; - } - - List readChannelSources() { - List res; - Map lcEnv = lowercaseMap(input.parameters(false)); - res = readChannelSources(CommonConstants.ENV_VARIABLE_PREFIX.toLowerCase(Locale.ENGLISH), lcEnv); - if (res != null && !res.isEmpty()) { - return res; - } - if (remoteSourcesAllowed) { - return readChannelSources("", input.getLocalRegistry().getGraalCapabilities()); // NOI18N - } else { - return Collections.emptyList(); - } - } - - private MergeStorage mergeChannels() { - if (mergedStorage != null) { - return mergedStorage; - } - mergedStorage = new MergeStorage(input.getLocalRegistry(), feedback); - mergedStorage.setIgnoreCatalogErrors(input.hasOption(Commands.OPTION_IGNORE_CATALOG_ERRORS)); - for (SoftwareChannelSource spec : getChannelSources()) { - SoftwareChannel ch = null; - for (SoftwareChannel.Factory f : factories) { - ch = f.createChannel(spec, input, feedback); - if (ch != null) { - break; - } - } - if (ch != null) { - mergedStorage.addChannel(spec, ch); - } - } - return mergedStorage; - } - - SoftwareChannel delegate(ComponentInfo ci) { - return mergeChannels().getOrigin(ci); - } - - public ComponentCollection getRegistry() { - if (union == null) { - union = new CatalogContents(feedback, mergeChannels(), input.getLocalRegistry()); - // get errors early - union.getComponentIDs(); - } - return union; - } - - @Override - public FileDownloader configureDownloader(ComponentInfo cInfo, FileDownloader dn) { - return delegate(cInfo).configureDownloader(cInfo, dn); - } - - @Override - public ComponentStorage getStorage() { - return mergeChannels(); - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemoteComponentParam.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemoteComponentParam.java deleted file mode 100644 index 43e70c046c97..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemoteComponentParam.java +++ /dev/null @@ -1,425 +0,0 @@ -/* - * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import org.graalvm.component.installer.Archive; -import org.graalvm.component.installer.ComponentParam; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.InstallerStopException; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.persist.MetadataLoader; - -/** - * - * @author sdedic - */ -public abstract class RemoteComponentParam implements ComponentParam, MetadataLoader { - private final URL remoteURL; - private final String dispName; - private final String spec; - private final Feedback feedback; - private final ComponentInfo catalogInfo; - private ComponentInfo fileInfo; - private final boolean progress; - private boolean verifyJars; - private MetadataLoader fileLoader; - private boolean complete; - - protected RemoteComponentParam(ComponentInfo catalogInfo, String dispName, String spec, Feedback feedback, boolean progress) { - this.catalogInfo = catalogInfo; - this.dispName = dispName; - this.spec = spec; - this.feedback = feedback.withBundle(RemoteComponentParam.class); - this.progress = progress; - this.remoteURL = catalogInfo.getRemoteURL(); - } - - protected RemoteComponentParam(URL remoteURL, String dispName, String spec, Feedback feedback, boolean progress) { - this.catalogInfo = null; - this.dispName = dispName; - this.spec = spec; - this.feedback = feedback.withBundle(RemoteComponentParam.class); - this.remoteURL = remoteURL; - this.progress = progress; - } - - @Override - public String getSpecification() { - return spec; - } - - @Override - public String getDisplayName() { - return dispName; - } - - protected ComponentInfo getCatalogInfo() { - return catalogInfo; - } - - @Override - public MetadataLoader createMetaLoader() throws IOException { - if (catalogInfo != null) { - return this; - } else { - return createFileLoader(); - } - } - - public void setVerifyJars(boolean verifyJars) { - this.verifyJars = verifyJars; - } - - private Path localPath; - - @Override - public MetadataLoader createFileLoader() throws IOException { - if (fileLoader != null) { - return fileLoader; - } - return fileLoader = doCreateFileLoader(metadataFromLocal(downloadLocalFile())); - } - - protected MetadataLoader doCreateFileLoader(MetadataLoader delegate) { - return new DelegateMetaLoader(delegate); - } - - /** - * The delegate will ensure the ComponentParam will start to serve LOCAL ComponentInfo just - * after the delegate metaloader creates it. - */ - class DelegateMetaLoader implements MetadataLoader { - private final MetadataLoader delegate; - - DelegateMetaLoader(MetadataLoader delegate) { - this.delegate = delegate; - } - - @Override - public void close() throws IOException { - delegate.close(); - } - - protected final ComponentInfo catalogInfo() { - return catalogInfo; - } - - @Override - public ComponentInfo getComponentInfo() { - fileInfo = configureComponentInfo(delegate.getComponentInfo()); - complete = true; - return fileInfo; - } - - protected ComponentInfo configureComponentInfo(ComponentInfo info) { - if (remoteURL != null) { - info.setRemoteURL(remoteURL); - } - return info; - } - - @Override - public List getErrors() { - return delegate.getErrors(); - } - - @Override - public Archive getArchive() throws IOException { - return delegate.getArchive(); - } - - @Override - public String getLicenseType() { - return delegate.getLicenseType(); - } - - @Override - public String getLicenseID() { - if (catalogInfo != null) { - String catalogLicense = catalogInfo.getLicensePath(); - if (catalogLicense != null && catalogLicense.contains("://")) { - return catalogLicense; - } - } - return delegate.getLicenseID(); - } - - @Override - public String getLicensePath() { - return delegate.getLicensePath(); - } - - @Override - public MetadataLoader infoOnly(boolean only) { - return delegate.infoOnly(only); - } - - @Override - public boolean isNoVerifySymlinks() { - return delegate.isNoVerifySymlinks(); - } - - @Override - public void loadPaths() throws IOException { - delegate.loadPaths(); - } - - @Override - public Map loadPermissions() throws IOException { - return delegate.loadPermissions(); - } - - @Override - public Map loadSymlinks() throws IOException { - return delegate.loadSymlinks(); - } - - @Override - public void setNoVerifySymlinks(boolean noVerifySymlinks) { - delegate.setNoVerifySymlinks(noVerifySymlinks); - } - - @Override - public ComponentInfo completeMetadata() throws IOException { - return delegate.completeMetadata(); - } - } - - /** - * Creates a metaloader for the local file. - * - * @param localFile the locally stored file - * @return loader reading the local file. - * @throws IOException error during construction of the loader. - */ - protected abstract MetadataLoader metadataFromLocal(Path localFile) throws IOException; - - private FileDownloader downloader; - - protected final FileDownloader getDownloader() { - return downloader; - } - - protected Path downloadLocalFile() throws IOException { - if (localPath != null && Files.isReadable(localPath)) { - return localPath; - } - try { - FileDownloader dn = createDownloader(); - if (catalogInfo != null) { - dn.setShaDigest(catalogInfo.getShaDigest()); - } - dn.setDisplayProgress(progress); - dn.download(); - localPath = dn.getLocalFile().toPath(); - downloader = dn; - } catch (FileNotFoundException ex) { - throw feedback.failure("REMOTE_ErrorDownloadingNotExist", ex, spec, remoteURL); - } - return localPath; - } - - protected FileDownloader createDownloader() { - FileDownloader dn = new FileDownloader(feedback.l10n("REMOTE_ComponentFileLabel", getDisplayName(), getSpecification()), remoteURL, feedback); - return dn; - } - - @Override - public boolean isComplete() { - return complete; - } - - @Override - public void close() throws IOException { - if (fileLoader != null) { - fileLoader.close(); - } - if (localPath != null) { - try { - Files.deleteIfExists(localPath); - } catch (IOException ex) { - feedback.error("REMOTE_CannotDeleteLocalFile", ex, localPath.toString(), ex.getLocalizedMessage()); - } - } - } - - @Override - public ComponentInfo getComponentInfo() { - return fileInfo != null ? fileInfo : catalogInfo; - } - - @Override - public List getErrors() { - return Collections.emptyList(); - } - - @Override - public Archive getArchive() { - try { - return createFileLoader().getArchive(); - } catch (IOException ex) { - throw feedback.failure("REMOTE_ErrorDownloadingComponent", ex, spec, remoteURL, ex.getLocalizedMessage()); - } - } - - @Override - public String getLicenseType() { - if (catalogInfo != null) { - return catalogInfo.getLicenseType(); - } else { - return null; - } - } - - protected FileDownloader createFileDownloader(URL remote, String desc, boolean mainFile) { - FileDownloader dn = new FileDownloader(desc, remote, feedback); - if (mainFile) { - configureRelatedDownloader(dn); - } - return dn; - } - - public String downloadAndHashLicense(String remote) { - String desc = getLicenseType(); - if (desc == null) { - desc = remote; - } - try { - URL u = SystemUtils.toURL(remote); - FileDownloader dn = createFileDownloader(u, feedback.l10n("LICENSE_RemoteLicenseDescription", desc), false); - dn.download(); - String s = String.join("\n", Files.readAllLines(dn.getLocalFile().toPath())); - return SystemUtils.digestString(s, false) /* + "_" + remote */; - } catch (IOException ex) { - throw feedback.failure("ERROR_DownloadLicense", ex, desc, ex.getLocalizedMessage()); - } - } - - /** - * License digest or URL. - */ - private String cachedLicenseID; - - @Override - public String getLicenseID() { - if (cachedLicenseID != null) { - return cachedLicenseID; - } - String s = getLicensePath(); - if (s != null && SystemUtils.isRemotePath(s)) { - // special case, so that the package will not be downloaded, if the - // catalog specifies HTTP remote path. - return cachedLicenseID = downloadAndHashLicense(s); - } - try { - return createFileLoader().getLicenseID(); - } catch (IOException ex) { - throw feedback.failure("REMOTE_ErrorDownloadingComponent", ex, spec, remoteURL, ex.getLocalizedMessage()); - } - } - - @Override - public String getLicensePath() { - if (catalogInfo != null) { - String lt = catalogInfo.getLicenseType(); - String path = catalogInfo.getLicensePath(); - if (lt == null || path != null) { - return path; - } - } - try { - return createFileLoader().getLicensePath(); - } catch (IOException ex) { - throw feedback.failure("REMOTE_ErrorDownloadingComponent", ex, spec, remoteURL, ex.getLocalizedMessage()); - } - } - - @Override - public MetadataLoader infoOnly(boolean only) { - return this; - } - - @Override - public boolean isNoVerifySymlinks() { - return true; - } - - @Override - public void loadPaths() { - } - - @Override - public Map loadPermissions() throws IOException { - return null; - } - - @Override - public Map loadSymlinks() throws IOException { - return null; - } - - @Override - public void setNoVerifySymlinks(boolean noVerifySymlinks) { - } - - @Override - public String getFullPath() { - return remoteURL.toString(); - } - - @Override - public String getShortName() { - return getComponentInfo().getId(); - } - - protected String getSpec() { - return spec; - } - - protected Feedback getFeedback() { - return feedback; - } - - protected boolean isProgress() { - return progress; - } - - protected boolean isVerifyJars() { - return verifyJars; - } - - protected Path getLocalPath() { - return localPath; - } -} diff --git a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemotePropertiesStorage.java b/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemotePropertiesStorage.java deleted file mode 100644 index 306e5e5e477c..000000000000 --- a/vm/src/org.graalvm.component.installer/src/org/graalvm/component/installer/remote/RemotePropertiesStorage.java +++ /dev/null @@ -1,256 +0,0 @@ -/* - * Copyright (c) 2018, 2019, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ -package org.graalvm.component.installer.remote; - -import java.io.IOException; -import java.net.URL; -import java.text.MessageFormat; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Properties; -import java.util.Set; -import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.graalvm.component.installer.Feedback; -import org.graalvm.component.installer.SystemUtils; -import org.graalvm.component.installer.Version; -import org.graalvm.component.installer.model.ComponentInfo; -import org.graalvm.component.installer.model.ComponentRegistry; -import org.graalvm.component.installer.model.RemoteInfoProcessor; -import org.graalvm.component.installer.persist.AbstractCatalogStorage; -import org.graalvm.component.installer.persist.ComponentPackageLoader; - -public class RemotePropertiesStorage extends AbstractCatalogStorage { - protected static final String PROPERTY_HASH = "hash"; // NOI18N - private static final String FORMAT_FLAVOUR = "Component\\.{0}"; // NOI18N - private static final String FORMAT_SINGLE_VERSION = "Component\\.{0}_{1}\\."; // NOI18N - - private final Properties catalogProperties; - private final String flavourRegex; - private final String singleRegex; - private final Version graalVersion; - - private RemoteInfoProcessor remoteProcessor = RemoteInfoProcessor.NONE; - - private Map filteredComponents; - - public RemotePropertiesStorage(Feedback fb, ComponentRegistry localReg, Properties catalogProperties, String graalSelector, Version gVersion, URL baseURL) { - super(localReg, fb, baseURL); - this.catalogProperties = catalogProperties; - flavourRegex = MessageFormat.format(FORMAT_FLAVOUR, graalSelector); - graalVersion = gVersion != null ? gVersion : localReg.getGraalVersion(); - singleRegex = MessageFormat.format(FORMAT_SINGLE_VERSION, - graalVersion.originalString(), graalSelector); - } - - public RemoteInfoProcessor getRemoteProcessor() { - return remoteProcessor; - } - - public void setRemoteProcessor(RemoteInfoProcessor remoteProcessor) { - this.remoteProcessor = remoteProcessor; - } - - /** - * Returns properties relevant for a specific component ID. May return properties for several - * versions of the component. Return {@code null} if the component does not exist at all. - * - * @param id component ID. - * @return Properties or {@code null} if component was not found. - */ - Properties filterPropertiesForVersions(String id) { - splitPropertiesToComponents(); - return filteredComponents.get(id); - } - - private void splitPropertiesToComponents() { - if (filteredComponents != null) { - return; - } - filteredComponents = new HashMap<>(); - - // known prefixes. Version will not be parsed again for therse. - Set knownPrefixes = new HashSet<>(); - - // already accepted prefixes - Set acceptedPrefixes = new HashSet<>(); - - Pattern flavourPattern = Pattern.compile("^" + flavourRegex, Pattern.CASE_INSENSITIVE); - Pattern singlePattern = Pattern.compile("^" + singleRegex, Pattern.CASE_INSENSITIVE); - - for (String s : catalogProperties.stringPropertyNames()) { - String cid; - String pn; - - int slashPos = s.indexOf('/'); - int secondSlashPos = s.indexOf('/', slashPos + 1); - int l; - - if (slashPos != -1 && secondSlashPos != -1) { - if (!flavourPattern.matcher(s).find()) { - continue; - } - pn = s.substring(slashPos + 1); - - String pref = s.substring(0, secondSlashPos); - - int lastSlashPos = s.indexOf('/', secondSlashPos + 1); - if (lastSlashPos == -1) { - lastSlashPos = secondSlashPos; - } - l = lastSlashPos + 1; - if (knownPrefixes.add(pref)) { - try { - Version vn = Version.fromString(s.substring(slashPos + 1, secondSlashPos)); - if (acceptsVersion(vn)) { - acceptedPrefixes.add(pref); - } - } catch (IllegalArgumentException ex) { - feedback.verboseOutput("REMOTE_BadComponentVersion", pn); - } - } - if (!acceptedPrefixes.contains(pref)) { - // ignore obsolete versions - continue; - } - - } else { - Matcher m = singlePattern.matcher(s); - if (!m.find()) { - continue; - } - // versionless component - l = m.end(); - // normalized version - pn = graalVersion.toString() + "/" + s.substring(l); - } - int dashPos = s.indexOf("-", l); - if (dashPos == -1) { - dashPos = s.length(); - } - cid = s.substring(l, dashPos); - String patchedCid = cid.replace("_", "-"); - String patchedPn = pn.replace(cid, patchedCid); - filteredComponents.computeIfAbsent(patchedCid, (unused) -> new Properties()).setProperty(patchedPn, catalogProperties.getProperty(s)); - } - } - - boolean acceptsVersion(Version vers) { - // also accept other minor patc - return graalVersion.installVersion().compareTo(vers.installVersion()) <= 0; - } - - @Override - public Set listComponentIDs() throws IOException { - Set ret = new HashSet<>(); - splitPropertiesToComponents(); - ret.addAll(filteredComponents.keySet()); - return ret; - } - - @Override - public Set loadComponentMetadata(String id) throws IOException { - Properties compProps = filterPropertiesForVersions(id); - if (compProps == null) { - return null; - } - Map infos = new HashMap<>(); - Set processedPrefixes = new HashSet<>(); - - for (String s : compProps.stringPropertyNames()) { - int slashPos = s.indexOf('/'); - int anotherSlashPos = s.indexOf('/', slashPos + 1); - - String vS = s.substring(0, slashPos); - String identity = anotherSlashPos == -1 ? vS : s.substring(0, anotherSlashPos); - if (!processedPrefixes.add(identity)) { - continue; - } - try { - Version.fromString(vS); - } catch (IllegalArgumentException ex) { - feedback.verboseOutput("REMOTE_BadComponentVersion", s); - continue; - } - ComponentInfo ci = createVersionedComponent(identity + "/", compProps, id, - anotherSlashPos == -1 ? "" : s.substring(slashPos + 1, anotherSlashPos)); - // just in case the catalog info is broken - if (ci != null) { - infos.put(identity, ci); - } - } - - return new HashSet<>(infos.values()); - } - - private ComponentInfo createVersionedComponent(String versoPrefix, Properties filtered, String id, String tag) throws IOException { - URL downloadURL; - String s = filtered.getProperty(versoPrefix + id.toLowerCase()); - if (s == null) { - return null; - } - // try { - downloadURL = SystemUtils.toURL(baseURL, s); - String prefix = versoPrefix + id.toLowerCase() + "-"; // NOI18N - String hashS = filtered.getProperty(prefix + PROPERTY_HASH); - byte[] hash = hashS == null ? null : toHashBytes(id, hashS); - - ComponentPackageLoader ldr = new ComponentPackageLoader(tag, - new PrefixedPropertyReader(prefix, filtered), - feedback); - ComponentInfo info = ldr.createComponentInfo(); - info.setRemoteURL(downloadURL); - info.setShaDigest(hash); - info.setOrigin(baseURL.toString()); - return configureComponentInfo(info); - } - - /** - * Allows to override, or supplement component information. - * - * @param info component info - * @return possibly modified or new instance. - */ - protected ComponentInfo configureComponentInfo(ComponentInfo info) { - return remoteProcessor.decorateComponent(info); - } - - static class PrefixedPropertyReader implements Function { - private final String compPrefix; - private final Properties props; - - PrefixedPropertyReader(String compPrefix, Properties props) { - this.compPrefix = compPrefix; - this.props = props; - } - - @Override - public String apply(String t) { - return props.getProperty(compPrefix + t); - } - } -} diff --git a/vm/src/org.graalvm.component.installer/.checkstyle_checks.xml b/vm/src/org.graalvm.polybench/.checkstyle_checks.xml similarity index 100% rename from vm/src/org.graalvm.component.installer/.checkstyle_checks.xml rename to vm/src/org.graalvm.polybench/.checkstyle_checks.xml diff --git a/wasm/mx.wasm/suite.py b/wasm/mx.wasm/suite.py index 944b0df4517b..bd74571aaa3d 100644 --- a/wasm/mx.wasm/suite.py +++ b/wasm/mx.wasm/suite.py @@ -42,7 +42,7 @@ "mxversion": "6.41.0", "name" : "wasm", "groupId" : "org.graalvm.wasm", - "version" : "24.0.0.1", + "version" : "24.0.1.0", "versionConflictResolution" : "latest", "url" : "http://graalvm.org/", "developer" : {