[#121215] [Ruby master Bug#21166] Fiber Scheduler is unable to be interrupted by `IO#close`. — "ioquatix (Samuel Williams) via ruby-core" <ruby-core@...>

Issue #21166 has been reported by ioquatix (Samuel Williams).

13 messages 2025/03/02

[#121222] [Ruby master Bug#21167] Visual Studio 2022 17.13.x couldn't build ruby.exe — "hsbt (Hiroshi SHIBATA) via ruby-core" <ruby-core@...>

Issue #21167 has been reported by hsbt (Hiroshi SHIBATA).

8 messages 2025/03/03

[#121234] [Ruby master Bug#21168] Prism doesn't require argument parentheses (in some cases) when a block is present but parse.y does — "Earlopain (Earlopain _) via ruby-core" <ruby-core@...>

Issue #21168 has been reported by Earlopain (Earlopain _).

8 messages 2025/03/04

[#121389] [Ruby Bug#21187] Strings concatenated with `\` getting frozen with literal hashes (PRISM only) — LocoDelAssembly via ruby-core <ruby-core@...>

Issue #21187 has been reported by LocoDelAssembly (Hern=E1n Pereira).

12 messages 2025/03/17

[#121413] [Ruby Bug#21193] Inherited callback returns `nil` for `Object.const_source_location` — "eileencodes (Eileen Uchitelle) via ruby-core" <ruby-core@...>

Issue #21193 has been reported by eileencodes (Eileen Uchitelle).

15 messages 2025/03/20

[#121451] [Ruby Bug#21201] Performance regression when defining methods inside `refine` blocks — "alpaca-tc (Hiroyuki Ishii) via ruby-core" <ruby-core@...>

Issue #21201 has been reported by alpaca-tc (Hiroyuki Ishii).

8 messages 2025/03/27

[ruby-core:121491] [Ruby Feature#18784] `FileUtils.rm_f` and `FileUtils.rm_rf` should not mask exceptions

From: deivid via ruby-core <ruby-core@...>
Date: 2025-03-31 19:30:56 UTC
List: ruby-core #121491
Issue #18784 has been updated by deivid (David Rodr=EDguez).


I realized I never replied to latest objections from @mame to this feature.

My use case is to make sure temporary test files and folders are cleaned af=
ter each test, because if they are not cleaned the following tests may not =
work as expected, since they rely on starting with an empty tmp folder. I'm=
 not sure if that's "1) delete target at all costs" or "2) delete target if=
 possible". I think it's "2), but raise an error if not possible".

The kind of swallowed issues I've run into in the past are things like:
* Keyword vs positional parameter error due to accidentally using a version=
 of FileUtils not supported by my version of Ruby.
* ENAMETOOLONG errors due to a bug in Ruby.

Things I definitely wanted to know about because they made my tmp test fold=
er not removed and affected subsequent specs in hard to debug ways.

For these issues, `FileUtils.rm_rf` raising an error and not swallowing it =
would've helped, I didn't need any further retry/sleep/chmod manipulations,=
 and they would have not helped my use case (because they would have not ma=
de any difference).

By the way, I believe `FileUtils.rm_rf` on Windows seems to already have so=
me of this chmod+retry behaviour @mame was mentioning: https://github.com/r=
uby/fileutils/blob/636975a184f07ccef31a0ffd9412be8fbb75e087/lib/fileutils.r=
b#L2336-L2355. I don't need nor like this behavior, but just mentioning it.

In any case, I decided to stick to using `FileUtils.rm_r` and make sure I d=
on't pass folders that don't exist as targets. That already has the exact b=
ehavior I'm asking for, so I'm fine with this issue being closed.

----------------------------------------
Feature #18784: `FileUtils.rm_f` and `FileUtils.rm_rf` should not mask exce=
ptions
https://bugs.ruby-lang.org/issues/18784#change-112511

* Author: deivid (David Rodr=EDguez)
* Status: Open
----------------------------------------
In recent times, I've been having issues with these methods because they do=
n't let you know when some issue happened while trying to remove the given =
folders/files.

IMO most users expect all pre-existing folders/files that are passed to the=
se methods to be actually removed by the methods. Instead, when this happen=
s, errors are silently swallowed and normally the result is that you will g=
et some other issue further down the road, making the problem hard to debug.

The current workaround I'm using is to double check whether the files still=
 exist after the method, and raise a custom error if they do, but I still c=
an't see the original problem, so issues are similarly hard to debug.

This is also a deviation from how `rm -rf` and `rm -f` work, since these to=
ols finish with a failure exit code when they fail to remove the given file=
s. Given that `fileutils` is intended to mimic shell functionality, I think=
 this is just a bug.

I think the intention of the `force` flag here is to:
* Don't prompt for confirmation.
* Ignore given arguments that are not files that already exist.

But any issue other than that should not be swallowed, and in general I thi=
nk the method should succeed if and only if the given list of file names do=
es not exist after the methods are done.

I think this is in line with the following note I get when I run `man rm`, =
but also suggests that this is not the standard behavior of "historical imp=
lementations"

> COMPATIBILITY
>
> The rm utility differs from historical implementations in that the -f opt=
ion only masks attempts to remove non-existent files instead of masking a l=
arge variety of errors.

I implemented this at https://github.com/ruby/fileutils/pull/58, but treati=
ng this as a bug. I can also implement a more conservative for approach for=
 users that might be using `FileUtils.rm_rf` or `FileUtils.rm_f` but don't =
really care if the files are removed or not.

Alternative proposals would be `FileUtils.rm_rf(force: strict)`, or `FileUt=
ils.strict_rm_rf`, but to be honest, if this is considered a breaking chang=
e, I would ship it as a new major version, and let users update their code =
to swallow errors themselves if they need to.

Happy to hear any feedback!



--=20
https://bugs.ruby-lang.org/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.rub=
y-lang.org/


In This Thread

Prev Next