[#97063] [Ruby master Bug#16608] ConditionVariable#wait should return false when timeout exceeded — shugo@...

Issue #16608 has been reported by shugo (Shugo Maeda).

10 messages 2020/02/05

[#97084] [Ruby master Feature#16614] New method cache mechanism for Guild — ko1@...

Issue #16614 has been reported by ko1 (Koichi Sasada).

18 messages 2020/02/07

[#97248] [Ruby master Bug#16651] Extensions Do Not Compile on Mingw64 — cfis@...

Issue #16651 has been reported by cfis (Charlie Savage).

17 messages 2020/02/24

[#97289] [Ruby master Bug#16658] `method__cache__clear` DTrace hook was dropped without replacement — v.ondruch@...

Issue #16658 has been reported by vo.x (Vit Ondruch).

9 messages 2020/02/27

[#97307] [Ruby master Feature#16663] Add block or filtered forms of Kernel#caller to allow early bail-out — headius@...

Issue #16663 has been reported by headius (Charles Nutter).

29 messages 2020/02/28

[#97310] [Ruby master Feature#16665] Add an Array#except_index method — alexandr1golubenko@...

Issue #16665 has been reported by alex_golubenko (Alex Golubenko).

12 messages 2020/02/29

[ruby-core:97188] [Ruby master Bug#14891] Pathname#join has different behaviour to File.join

From: zverok.offline@...
Date: 2020-02-18 10:09:44 UTC
List: ruby-core #97188
Issue #14891 has been updated by zverok (Victor Shepelev).


> I am wondering about the current behavior of Pathname#join, too. Are there any useful use cases for `Pathname.new('/a').join('/c', '/b').to_s #=> "/b"`

I believe that `Pathname#join` acts kinda like `cd` in the shell: `cd x` is "go deeper to `x` level" while `cd /x` si "go to the root, then into `/x` folder".

I believe it can be useful and desired behavior when working with configs for some authoring systems and devops tools, where you take from config "do 'action' by path 'path'", and config can specify lot of actions relative to app folder (like `touch: "tmp/restart.txt"`), but eventually want to specify something to do in relative-from-root folder (like `read: "/etc/myapp/settings.ini"`). Without following the specification "`/` at the beginning means go to root" it becomes rather ugly.

In other words, this: 
```ruby
# I am just trying to merge pathes explicitly, and receive "unexpected" result:
Pathname.new('foo').merge('/bar')
```
— might seem "weird", while this:
```ruby
@app_path = Path.new(__dir__)
# ...
@app_path.join(action.target_path) # when target_path is "/foo/bar", it allows to act outside of base dir
```
— is desirable (and is NOT achievable if `Pathname's` behavior will be changed)

I assume that those finding the behavior less logical think about paths about "just some abstract strings" and `Pathname#join` as a fancy way to write `Array#join(SYSTEM_PATH_DELIMITER)`. But `Pathname` tries to represent "filesystem path object" in a meaningful way, consistent with filesystem's intuitions.

----------------------------------------
Bug #14891: Pathname#join has different behaviour to File.join
https://bugs.ruby-lang.org/issues/14891#change-84296

* Author: robotdana (Dana Sherson)
* Status: Open
* Priority: Normal
* ruby -v: 2.6.0-preview2, and before
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
~~~ ruby
Pathname.new('/a').join('/b').to_s
# => "/b"
File.join(Pathname.new('/a'), '/b').to_s
# => "/a/b"
~~~

in my case `'/b'` was in a variable and it wasn't immediately obvious why it wasn't working when I moved to use Pathname

This seems to not be desired behaviour as it's different to `File.join`, and this case isn't document anywhere.

Can we either change the behaviour to treat the "other" of `Pathname#+` as always relative (possibly just removing a leading slash), or add this case to the documentation?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>

In This Thread

Prev Next