On 6 Aug 2014, at 9:12, Stefan Daschek wrote:

I understand that bundle commands using ruby should use the new ruby shim.

Correct. In theory they could use the “Current” symbolic link provided by the OS, but since it can point to either 1.8 or 2.0 (depending on what OS we run under), such code must be written for both ruby 1.8 and 2.0 and the same goes for any code required. Currently TextMate’s support libraries have not been updated for 2.0, so anything using support libraries effectively can’t use ruby 2.0.

What I expect we do is first update support libraries to run on both 1.8 and 2.0, then introduce a ruby20 shim, and then we can start to migrate commands to use the ruby20 shim instead of ruby18, that way, we don’t have to ensure that commands work on both 1.8 and 2.0, only the support libraries.

[…] in the RSpec bundle there are some commands to run RSpec examples in the current project […]

Should we use $TM_RUBY for that?

Yes, always use TM_RUBY for user code, but falling back on ruby found via PATH.

Of course this requires that any potential code running as part of the user’s code, e.g. for Ruby → Run (⌘R) we inject an exception handler into the user’s script, must be able to run on at least ruby 1.8 and 2.0.

Or rely on $PATH being customized correctly?

We strongly recommend not customizing PATH for the purpose of ruby. However, if all commands use the ruby18 shim, changing PATH should not break things.

Generally I’m a bit confused here: There’s the new ruby shim, there’s $TM_RUBY (used in many third party bundles for running bundle commands), there’s the possibility of customizing $PATH – what should be used when?

Using TM_RUBY to run bundle code is wrong, but it’s something we did in the past before we realized how big of a mess ruby compatibility would become.

TM_RUBY is solely for things like Run, Validate Syntax, Rake, etc. where the user may have a preference as to what ruby to use.

This is a general convention, i.e. any bundle that offers an interface to a tool, like tidy, git, markdown, etc., should call the tool via the TM_«tool» variable, so that it’s easy for the user to change what version of the tool to call (and maybe add some default parameters to this variable) — but in the implementation of a command, we should never use a TM_«tool» variable — ideally implementations would just use the tools from PATH, but unfortunately this has proven to not always work, because user may install updated/alternative versions that are not drop-in replacements for the old ones, ruby though is the main problem here, but we’ve also had issues with people installing GNU’s mktemp and having that before the BSD mktemp in PATH, which is why some commands call /usr/bin/mktemp and for the former (ruby) we’ve had to introduce a shim (previously we used absolute path, but then Apple removed ruby 1.8 in 10.10)…
_______________________________________________
textmate-dev mailing list
textmate-dev@lists.macromates.com
http://lists.macromates.com/listinfo/textmate-dev

Reply via email to