[#84867] [Ruby trunk Bug#14357] thread_safe tests suite segfaults — v.ondruch@...

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

11 messages 2018/01/15

[#84980] [Ruby trunk Feature#13618][Assigned] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — hsbt@...

Issue #13618 has been updated by hsbt (Hiroshi SHIBATA).

10 messages 2018/01/23
[#85012] Re: [Ruby trunk Feature#13618][Assigned] [PATCH] auto fiber schedule for rb_wait_for_single_fd and rb_waitpid — Eric Wong <normalperson@...> 2018/01/23

hsbt@ruby-lang.org wrote:

[ruby-core:85211] [Ruby trunk Feature#14405] Add base option to Pathname.glob also

From: kuwabara@...
Date: 2018-01-29 05:54:02 UTC
List: ruby-core #85211
Issue #14405 has been updated by pocke (Masataka Kuwabara).


nobu (Nobuyoshi Nakada) wrote:
> `Pathname` has `glob` instance method.
> 
> ```ruby
> p Pathname('lib').glob('i*.rb', 0) => [#<Pathname:lib/ipaddr.rb>, #<Pathname:lib/irb.rb>]
> ```
> 
> This looks brief enough.


Definitely. I also noticed it after created this ticket.



However I think `Pathname.glob` makes sense for two reasons.
Firstly, I think `Pathname.glob` should have same interface as `Dir.glob`. For example, if they have the same interface, we can replace `Dir.glob` with `Pathname.glob` more easily.

```
# before
Dir.glob('*', base: 'path/to/dir')


# When I'd like to get pathnames:

# If they don't have the same interface, I should rewrite the whole code.
Pathname('path/to/dir').glob('*')

# If they have the same interface, I'll just replace `Dir` with `Pathname` only. I think it is more easily.
Pathname.glob('*', base: 'path/to/dir')
```


Secondly, I feel the `Pathname('path/to/dir')` is a subject in `Pathname('path/to/dir').glob('*')`, and `base: 'path/to/dir'` is not a subject in `Pathname.glob('*', base: 'path/to/dir')`. 
I guess a base directory is not a subject of the `glob` methods in many cases, so I'd like to use the keyword argument style in many cases.
(ここの英語でちゃんと伝えきれているかわからないので、日本語で補足させてください。
`Pathname('path/to/dir').glob('*')`では、`Pathname('path/to/dir')`がこのコードの主役のように感じます。一方`Pathname.glob('*', base: 'path/to/dir')`の方では`base: 'path/to/dir'`はコードの主役ではないように感じます。
多くのケースにおいて、baseディレクトリと言うのは`glob`の主役ではない(パターンがこのメソッドの主役)と思うので、その関係をより色濃く反映したkeyword引数のスタイルの方を使いたいです。)



What do you think?



----------------------------------------
Feature #14405: Add base option to Pathname.glob also
https://bugs.ruby-lang.org/issues/14405#change-69957

* Author: pocke (Masataka Kuwabara)
* Status: Feedback
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------

`Dir.glob` has `base` option since Ruby 2.5.
https://bugs.ruby-lang.org/issues/13056

However `Pathname.glob` does not have the option.
I would like to use `base` option with `Pathname` class.
But I feel `Dir.glob('*.rb', base: 'dir').map{|path|Pathname(path)}` is lengthy, so I'd like to add the option to `Pathname.glob`.

This patch adds the option to `Pathname.glob` also.

For example:

```
require 'pathname'

p Pathname.glob('lib/i*.rb', 0)                               # => [#<Pathname:lib/irb.rb>, #<Pathname:lib/ipaddr.rb>]
p Dir.glob('i*.rb', 0, base: 'lib')                           # => ["irb.rb", "ipaddr.rb"]
p Dir.glob('i*.rb', base: 'lib')                              # => ["irb.rb", "ipaddr.rb"]
p Pathname.glob('i*.rb', 0, base: 'lib')                      # => [#<Pathname:irb.rb>, #<Pathname:ipaddr.rb>]
p Pathname.glob('i*.rb', base: 'lib')                         # => [#<Pathname:irb.rb>, #<Pathname:ipaddr.rb>]
p Pathname.glob('i*.rb', base: Pathname('lib'))               # => [#<Pathname:irb.rb>, #<Pathname:ipaddr.rb>]
p Pathname.glob('i*.rb', base: Pathname(`pwd`.chomp) / 'lib') # => [#<Pathname:irb.rb>, #<Pathname:ipaddr.rb>]
p Pathname.glob('i*.rb', base: File.join(`pwd`.chomp, 'lib')) # => [#<Pathname:irb.rb>, #<Pathname:ipaddr.rb>]

Pathname.glob('i*.rb', foo: 'bar') rescue p $!                # => #<ArgumentError: unknown keyword: foo>
Pathname.glob('i*.rb', foo: 'bar') rescue p $!.backtrace      # => ["<...>/test.rb:13:in `glob'", "<...>/test.rb:13:in `glob'", "<...>/test.rb:13:in `<main>'"]
```


If the patch is OK, I'll do the follwoing TODOs.

- Add documentation
- Add tests to here. https://github.com/ruby/ruby/blob/d891056e3a6232163e99636cfcbb7bbfe1291404/test/pathname/test_pathname.rb#L1231-L1241





---Files--------------------------------
pathname-glob-base.patch (597 Bytes)


-- 
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