|
From: <caw...@us...> - 2007-07-25 15:09:24
|
Revision: 2839
http://rubyeclipse.svn.sourceforge.net/rubyeclipse/?rev=2839&view=rev
Author: cawilliams
Date: 2007-07-25 08:09:22 -0700 (Wed, 25 Jul 2007)
Log Message:
-----------
fix #5308 - Add new GEM_LIB loadpath variable. Now we can use that to resolve gem locations. This fixes the problem that we had with using RUBY_LIB as the variable - not all users have installs where the gems are a subdirectory of the ruby library folder.
This asks the gem manager to resolve the path to where gems get installed, then looks in there.
Modified Paths:
--------------
trunk/com.aptana.rdt/META-INF/MANIFEST.MF
trunk/com.aptana.rdt/plugin.xml
Added Paths:
-----------
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/launching/
trunk/com.aptana.rdt/src/com/aptana/rdt/internal/launching/GemLoadpathVariablesInitializer.java
trunk/com.aptana.rdt/src/com/aptana/rdt/launching/
trunk/com.aptana.rdt/src/com/aptana/rdt/launching/IGemRuntime.java
Modified: trunk/com.aptana.rdt/META-INF/MANIFEST.MF
===================================================================
--- trunk/com.aptana.rdt/META-INF/MANIFEST.MF 2007-07-25 15:08:33 UTC (rev 2838)
+++ trunk/com.aptana.rdt/META-INF/MANIFEST.MF 2007-07-25 15:09:22 UTC (rev 2839)
@@ -9,6 +9,7 @@
Bundle-Vendor: Aptana, Inc.
Export-Package: com.aptana.rdt,
com.aptana.rdt.core.gems,
+ com.aptana.rdt.launching,
com.aptana.rdt.internal.core.gems;x-friends:="com.aptana.rdt.tests",
com.aptana.rdt.internal.parser.warnings,
com.aptana.rdt.internal.ui.preferences
Modified: trunk/com.aptana.rdt/plugin.xml
===================================================================
--- trunk/com.aptana.rdt/plugin.xml 2007-07-25 15:08:33 UTC (rev 2838)
+++ trunk/com.aptana.rdt/plugin.xml 2007-07-25 15:09:22 UTC (rev 2839)
@@ -202,4 +202,12 @@
point="org.eclipse.ui.startup">
<startup class="com.aptana.rdt.internal.core.gems.RubyGemsInitializer"/>
</extension>
+
+ <extension
+ point="org.rubypeople.rdt.core.loadpathVariableInitializer">
+ <loadpathVariableInitializer
+ variable="GEM_LIB"
+ class="com.aptana.rdt.internal.launching.GemLoadpathVariablesInitializer">
+ </loadpathVariableInitializer>
+ </extension>
</plugin>
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/launching/GemLoadpathVariablesInitializer.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/internal/launching/GemLoadpathVariablesInitializer.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/internal/launching/GemLoadpathVariablesInitializer.java 2007-07-25 15:09:22 UTC (rev 2839)
@@ -0,0 +1,82 @@
+package com.aptana.rdt.internal.launching;
+
+import org.eclipse.core.resources.IWorkspace;
+import org.eclipse.core.resources.IWorkspaceDescription;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.rubypeople.rdt.core.LoadpathVariableInitializer;
+import org.rubypeople.rdt.core.RubyCore;
+import org.rubypeople.rdt.internal.launching.LaunchingPlugin;
+import org.rubypeople.rdt.launching.IVMInstall;
+import org.rubypeople.rdt.launching.RubyRuntime;
+
+import com.aptana.rdt.AptanaRDTPlugin;
+import com.aptana.rdt.core.gems.IGemManager;
+import com.aptana.rdt.launching.IGemRuntime;
+
+public class GemLoadpathVariablesInitializer extends LoadpathVariableInitializer {
+
+ private IProgressMonitor fMonitor;
+
+ @Override
+ public void initialize(String variable) {
+ IVMInstall vmInstall = RubyRuntime.getDefaultVMInstall();
+ if (vmInstall != null) {
+ IPath newPath = null;
+ IGemManager gemManager = AptanaRDTPlugin.getDefault().getGemManager();
+ IPath gemPath = gemManager.getGemInstallPath();
+ if (gemPath != null) {
+ if (variable.equals(IGemRuntime.GEMLIB_VARIABLE)) {
+ newPath = gemPath.append("gems");
+ }
+ if (newPath == null) {
+ return;
+ }
+ IWorkspace workspace = ResourcesPlugin.getWorkspace();
+ IWorkspaceDescription wsDescription = workspace
+ .getDescription();
+ boolean wasAutobuild = wsDescription.isAutoBuilding();
+ try {
+ setAutobuild(workspace, false);
+ setRubyVMVariable(newPath, variable);
+ } catch (CoreException ce) {
+ LaunchingPlugin.log(ce);
+ return;
+ } finally {
+ try {
+ setAutobuild(workspace, wasAutobuild);
+ } catch (CoreException ce) {
+ LaunchingPlugin.log(ce);
+ }
+ }
+ }
+ }
+ }
+
+ private void setRubyVMVariable(IPath newPath, String var)
+ throws CoreException {
+ RubyCore.setLoadpathVariable(var, newPath, getMonitor());
+ }
+
+ private boolean setAutobuild(IWorkspace ws, boolean newState)
+ throws CoreException {
+ IWorkspaceDescription wsDescription = ws.getDescription();
+ boolean oldState = wsDescription.isAutoBuilding();
+ if (oldState != newState) {
+ wsDescription.setAutoBuilding(newState);
+ ws.setDescription(wsDescription);
+ }
+ return oldState;
+ }
+
+ protected IProgressMonitor getMonitor() {
+ if (fMonitor == null) {
+ return new NullProgressMonitor();
+ }
+ return fMonitor;
+ }
+
+}
Property changes on: trunk/com.aptana.rdt/src/com/aptana/rdt/internal/launching/GemLoadpathVariablesInitializer.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Added: trunk/com.aptana.rdt/src/com/aptana/rdt/launching/IGemRuntime.java
===================================================================
--- trunk/com.aptana.rdt/src/com/aptana/rdt/launching/IGemRuntime.java (rev 0)
+++ trunk/com.aptana.rdt/src/com/aptana/rdt/launching/IGemRuntime.java 2007-07-25 15:09:22 UTC (rev 2839)
@@ -0,0 +1,7 @@
+package com.aptana.rdt.launching;
+
+public interface IGemRuntime {
+
+ public static final String GEMLIB_VARIABLE = "GEM_LIB";
+
+}
Property changes on: trunk/com.aptana.rdt/src/com/aptana/rdt/launching/IGemRuntime.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|