[jbosstools-dev] [jbosstools-openshift] JBIDE-21175 - ensure more reliable locating of vagrant command (#831)
Max Rydahl Andersen
manderse at redhat.com
Wed Dec 9 04:48:45 EST 2015
On 8 Dec 2015, at 21:09, Rob Stryker wrote:
> Well, they run 'bash' basically, which then has a full path, and then
> feed further commands into the bash command. But I don't think running
> bash is a solution thats appropriate for us over in cdk / vagrant.
> I still think our tools should be able to handle if the command isn't
> on the path.
if it is not on the path users should be asked to point to it.
> There's no reason to make that assumption when to work around it is so
> simple. We simply search the path, which finds 95% of the usecases in
> a very very quick time. And in the event it's not on the path, we do
> the which/where, and this command responds almost instantly.
which searches the path and where is a control structure so I do not
follow what difference that makes.
> We've already noticed that Mac seems to generate a different path
> based on if you use the .app shortcut or from a terminal.
Yes, same for linux and windows afaik. They behave very similar here -
just that on linux we (devs not users) tend to use command line to start
things with.
> And windows users often install things like putty without explicitly
> putting them on the path since they're used to using the binaries
> directly. There seem to be many ways in which the path might be
> incomplete, and it's definitely worth our while to use every mechanism
> available to find them, to help our users and make our tools work
> OOTB.
I don't grok why you are talking about putty here.
For Vagrant users are required to have it on the path to use it properly
on windows afaik. So I don't understand why we can't rely on that too.
> Anyway, again, we only run the search logic once per workspace
> session. In 95% of the cases it responds extremely fast. In the event
> the binary isn't found on the path, the simple which/where runs, and
> also returns extremely quickly... and this is done only once per
> workspace. I can't even notice a delay honestly.
Again, search path == run which so I'm not following why this is
relevant ?
And I definitely do not like that search logic like this is done once
per workspace session. Should be done on each run. Eclipse is a long
running thing and unless operations are extremely expensive (like a
remote/possible blocking call) we should do them dynamically instead of
statically.
/max
>
> On 12/08/2015 03:00 PM, Max Rydahl Andersen wrote:
>> Rob,
>>
>> Is the Tty issue not separate from the way they use to locate the
>> right way to run.
>>
>> I.e. They assume user has vagrant on path. Removing all need for
>> doing custom which/where etc.
>>
>>
>> /max
>> http://about.me/maxandersen
>>
>>
>> On 08 Dec 2015, at 20:34, Gorkem Ercan <gercan at redhat.com
>> <mailto:gercan at redhat.com>> wrote:
>>
>>>
>>> I guess you can deal with /dev/tty. Perhaps something like "sh -l
>>> less >/dev/tty" would work (I have not tried it though)
>>>
>>> On Tue, Dec 8, 2015 at 1:40 PM, Rob Stryker <rob.stryker at jboss.com
>>> <mailto:rob.stryker at jboss.com>> wrote:
>>>
>>> OK, so, tl;dr is it seems you're using Debug.exec(etc) to launch
>>> the command, in this case bash, which then gives you an
>>> IProcess. You feed further input into the IProcess to get the
>>> desired result, and I'm assuming you wire in the console support
>>> on your own via stream listeners.
>>>
>>>
>>> So you're not using any of org.eclipse.tm.terminal stuff.
>>>
>>> I've played with your utility class
>>> https://github.com/gorkem/thym/blob/use_cli/plugins/org.eclipse.thym.core/src/org/eclipse/thym/core/internal/util/ExternalProcessUtility.java
>>> and it also seems to not function if the process being run is
>>> expecting the caller to be a TTY terminal (specifically, vagrant
>>> up for cdk2b3 not from the openshift-vagrant repo but the
>>> standard distribution).
>>>
>>> It seems to me that Runtime.exec(etc), Debug.exec(etc), the
>>> external tools launch configuration, and all other solutions are
>>> incapable of being treated as a tty. Only the
>>> org.eclipse.tm.terminal stuff is capable of implementing the
>>> additional requirements to be treated as a tty... however, I
>>> feel that using o.e.tm.terminal on a more regular basis is
>>> misguided. For the first part, it becomes difficult to read its
>>> output. The user can suddenly get involved in the process by
>>> typing things in at inopportune moments. It is impossible to use
>>> without the UI, so can't be done in the background, as well as a
>>> number of other issues that come as consequences of those.
>>>
>>> In short, it seems applications requiring a TTY environment are
>>> really not that many, and the fact that vagrant-registration
>>> requires it at all is very strange. It most likely needs the TTY
>>> functionality to accept a password without showing it, but I
>>> can't seem to figure out if thats just a guess or not.
>>>
>>> Either way, I'm going to stick with our current way of doing
>>> things, either via Runtime.exec when we want it in the
>>> background, ro external-tools launch config when we want the
>>> command's output to be shown in a console.
>>>
>>> - Rob
>>>
>>>
>>>
>>> On 12/08/2015 08:02 AM, Gorkem Ercan wrote:
>>>>
>>>> For Node.js based tools we needed a fully configured PATH
>>>> because it is often the case those tools will make calls to
>>>> other apps.
>>>> Basically our strategy is to start a full bash/cmd shell (notice
>>>> -l for bash) which will be configured fully. [1]
>>>> then execute the commands [2]
>>>> finally issue an exit to leave the shell [3]
>>>>
>>>> The only downside is you can not easily capture the process exit
>>>> code.
>>>>
>>>> The code examples are from the initial implementation that I
>>>> have done for CordovaCLI and uses eclipse libraries for starting
>>>> the process however it can be implemented equally same using the
>>>> Runtime.exec too. [4]
>>>>
>>>>
>>>> [1]
>>>> https://github.com/gorkem/thym/blob/use_cli/plugins/org.eclipse.thym.core/src/org/eclipse/thym/core/internal/cordova/CordovaCLI.java#L175
>>>> [2]
>>>> https://github.com/gorkem/thym/blob/use_cli/plugins/org.eclipse.thym.core/src/org/eclipse/thym/core/internal/cordova/CordovaCLI.java#L135
>>>> [3]
>>>> https://github.com/gorkem/thym/blob/use_cli/plugins/org.eclipse.thym.core/src/org/eclipse/thym/core/internal/cordova/CordovaCLI.java#L139
>>>> [4]
>>>> https://github.com/gorkem/js-parser-benchmarks/blob/master/src/main/java/org/jboss/tools/benchmark/parsers/esprima/EsprimaParser.java#L70
>>>> --
>>>> Gorkem
>>>>
>>>> On Tue, Dec 8, 2015 at 2:09 AM, Max Rydahl Andersen
>>>> <manderse at redhat.com <mailto:manderse at redhat.com>> wrote:
>>>>
>>>> Question relevant on the list.
>>>>
>>>> /max
>>>> http://about.me/maxandersen
>>>>
>>>>
>>>> On 08 Dec 2015, at 05:09, Rob Stryker <rob.stryker at jboss.com
>>>> <mailto:rob.stryker at jboss.com>> wrote:
>>>>
>>>>> Hey Guys:
>>>>>
>>>>> Can you clarify how you guys call filesystem commands like
>>>>> npm and cordova?
>>>>>
>>>>> In the CDK tools as currently coded, we do two different
>>>>> things. One, is that we create an "External Tools Launch
>>>>> Configuration" which runs the command. This requires
>>>>> knowing the actual location of the executable. The other
>>>>> is to simply call Runtime.exec(etc) and get a Process from it.
>>>>>
>>>>> The external tools launch config is useful because it opens
>>>>> a console for us and means we don't have to do any of the
>>>>> wiring, so we use that when we know we want the commands to
>>>>> be visible to the user. We use the runtime.exec() in the
>>>>> background for commands that we want to run without showing
>>>>> the user (for example if we did a vagrant adbinfo)
>>>>>
>>>>> How do you all do it?
>>>>>
>>>>> - Rob Stryker
>>>>>
>>>>>
>>>>> On 12/03/2015 11:36 AM, Max Rydahl Andersen wrote:
>>>>>>
>>>>>> In
>>>>>>
>>>>>> plugins/org.jboss.tools.openshift.cdk.server/src/org/jboss/tools/openshift/cdk/server/core/internal/CDKConstantUtility.java
>>>>>>
>>>>>> <https://github.com/jbosstools/jbosstools-openshift/pull/831#discussion_r46575476>:
>>>>>>
>>>>>> > public static String getVagrantLocation() {
>>>>>> > - return VAGRANT_LOCATION_LINUX;
>>>>>> > + return findVagrantLocation();
>>>>>>
>>>>>> im wondering if we are better of launching this similar to
>>>>>> what @gercan <https://github.com/gercan> and @ibuziuk
>>>>>> <https://github.com/ibuziuk> been doing for npm and
>>>>>> cordova cli tools.
>>>>>>
>>>>>> i.e. call out via bash or cmd.exe making it up to the user
>>>>>> to have it properly configured in PATH
>>>>>>
>>>>>> —
>>>>>> Reply to this email directly or view it on GitHub
>>>>>>
>>>>>> <https://github.com/jbosstools/jbosstools-openshift/pull/831/files#r46575476>.
>>>>>>
>>>>>
>>>>
>>>
>>>
/max
http://about.me/maxandersen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jbosstools-dev/attachments/20151209/f1ce4049/attachment-0001.html
More information about the jbosstools-dev
mailing list