From: daniel@...42.com Date: 2020-05-08T16:22:41+00:00 Subject: [ruby-core:98221] [Ruby master Bug#16831] Running `Pathname#glob` with `File::FNM_DOTMATCH` option loses `.` and `..` Issue #16831 has been updated by Dan0042 (Daniel DeLorme). I don't think those can have consistent results, because Pathname#glob is equivalent to using the `base` option of `Dir.glob` and then joining the paths, which is not the same as joining the paths into a glob and then invoking `Dir.glob`. In particular they have different behavior if the base contains glob characters. And I don't think there's a method of Pathname that allows to join without cleaning the path. ```ruby b = Pathname.new("ext") b.glob("*").min #=> # Dir.glob("*", base: b).min #=> "-test-" Dir.glob(b+"*").min #=> "ext/-test-" b = Pathname.new("{ext,man}") b.glob("*").min #=> nil because there's no literal "{ext,man}" dir Dir.glob("*", base: b).min #=> nil Dir.glob(b+"*").min #=> "ext/-test-" ``` ---------------------------------------- Bug #16831: Running `Pathname#glob` with `File::FNM_DOTMATCH` option loses `.` and `..` https://bugs.ruby-lang.org/issues/16831#change-85461 * Author: jnchito (Junichi Ito) * Status: Open * Priority: Normal * ruby -v: ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- Running `Dir.glob`, `Pathname.glob` with `File::FNM_DOTMATCH` option keeps `.` and `..` as their basename: ``` ruby require 'pathname' pathname = Pathname.pwd #=> # # Dir.glob keeps "." and ".." Dir.glob(pathname.join('*'), File::FNM_DOTMATCH).sort[0..1] #=> ["/Users/jnito/dev/.", "/Users/jnito/dev/.."] # Pathname.glob keeps "." and ".." too Pathname.glob(pathname.join('*'), File::FNM_DOTMATCH).sort[0..1] #=> [#, #] ``` I expect `Pathname#glob` with `File::FNM_DOTMATCH` option has same behavior, but it loses `.` and `..`: ``` ruby # Pathname#glob loses "." and ".." pathname.glob('*', File::FNM_DOTMATCH).sort[0..1] #=> [#, #] ``` I wanted to replace my code from `Pathname.glob(pathname.join('*'), File::FNM_DOTMATCH)` to `pathname.glob('*', File::FNM_DOTMATCH)`, but I couldn't do due to their incompatibility. So I want `Pathname#glob` to keep `.` and `..`. -- https://bugs.ruby-lang.org/ Unsubscribe: