ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-core:121475] [Ruby Bug#21205] File::Stat#birthtime is available on Linux
@ 2025-03-30  7:27 BertramScharpf (Bertram Scharpf) via ruby-core
  2025-03-30  9:13 ` [ruby-core:121476] " byroot (Jean Boussier) via ruby-core
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: BertramScharpf (Bertram Scharpf) via ruby-core @ 2025-03-30  7:27 UTC (permalink / raw)
  To: ruby-core; +Cc: BertramScharpf (Bertram Scharpf)

Issue #21205 has been reported by BertramScharpf (Bertram Scharpf).

----------------------------------------
Bug #21205: File::Stat#birthtime is available on Linux
https://bugs.ruby-lang.org/issues/21205

* Author: BertramScharpf (Bertram Scharpf)
* Status: Open
* ruby -v: ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux]
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
Not that I would run into any problem with it, but this behaviour is confusing:

    RbConfig::CONFIG["platform"]     #=> "amd64-freebsd14"
    (File.birthtime "/").class       #=> Time
    (File.stat "/").birthtime.class  #=> Time

    RbConfig::CONFIG["platform"]     #=> "x86_64-linux"
    (File.birthtime "/").class       #=> Time
    (File.stat "/").birthtime        # raises NotImplementedError




-- 
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.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:121476] [Ruby Bug#21205] File::Stat#birthtime is available on Linux
  2025-03-30  7:27 [ruby-core:121475] [Ruby Bug#21205] File::Stat#birthtime is available on Linux BertramScharpf (Bertram Scharpf) via ruby-core
@ 2025-03-30  9:13 ` byroot (Jean Boussier) via ruby-core
  2025-03-31  5:48 ` [ruby-core:121479] " BertramScharpf (Bertram Scharpf) via ruby-core
  2025-03-31  8:25 ` [ruby-core:121480] [Ruby Feature#21205] Make File::Stat#birthtime " byroot (Jean Boussier) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: byroot (Jean Boussier) via ruby-core @ 2025-03-30  9:13 UTC (permalink / raw)
  To: ruby-core; +Cc: byroot (Jean Boussier)

Issue #21205 has been updated by byroot (Jean Boussier).


Contrary to FreeBSD, on Linux the `birthtime` isn't present in the struct returned by `stat(2)`: https://man7.org/linux/man-pages/man3/stat.3type.html (see how there is no `btime`).

What `File.birthtime` does, it that it uses `statx(2)` https://man7.org/linux/man-pages/man2/statx.2.html

So the only way to fix the weirdness you point out, would be for `File.stat` to actually use `statx(2)` under the hood.

But it returns a lot more data, so there might be some performance considerations.

That being said, perhaps we should do it for correctness, because unless I'm mistaken, on Linux `stat(2)` return 32bit time, so it will wrap around in 2038. `statx(2)` returns 64-bit timestamps, so it seems that Linux want users to migrate to `statx(2)` eventually.



----------------------------------------
Bug #21205: File::Stat#birthtime is available on Linux
https://bugs.ruby-lang.org/issues/21205#change-112494

* Author: BertramScharpf (Bertram Scharpf)
* Status: Open
* ruby -v: ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux]
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
Not that I would run into any problem with it, but this behaviour is confusing:

    RbConfig::CONFIG["platform"]     #=> "amd64-freebsd14"
    (File.birthtime "/").class       #=> Time
    (File.stat "/").birthtime.class  #=> Time

    RbConfig::CONFIG["platform"]     #=> "x86_64-linux"
    (File.birthtime "/").class       #=> Time
    (File.stat "/").birthtime        # raises NotImplementedError




-- 
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.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:121479] [Ruby Bug#21205] File::Stat#birthtime is available on Linux
  2025-03-30  7:27 [ruby-core:121475] [Ruby Bug#21205] File::Stat#birthtime is available on Linux BertramScharpf (Bertram Scharpf) via ruby-core
  2025-03-30  9:13 ` [ruby-core:121476] " byroot (Jean Boussier) via ruby-core
@ 2025-03-31  5:48 ` BertramScharpf (Bertram Scharpf) via ruby-core
  2025-03-31  8:25 ` [ruby-core:121480] [Ruby Feature#21205] Make File::Stat#birthtime " byroot (Jean Boussier) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: BertramScharpf (Bertram Scharpf) via ruby-core @ 2025-03-31  5:48 UTC (permalink / raw)
  To: ruby-core; +Cc: BertramScharpf (Bertram Scharpf)

Issue #21205 has been updated by BertramScharpf (Bertram Scharpf).


byroot (Jean Boussier) wrote in #note-1:
> Contrary to FreeBSD, on Linux the `birthtime` isn't present in the struct returned by `stat(2)`: https://man7.org/linux/man-pages/man3/stat.3type.html (see how there is no `btime`).

I know. I did research about that but gave up.

This is how I solved my problem for now: <https://github.com/BertramScharpf/rbfind/commit/e6ed59668cb5707f4519272401113a8173f819af>.


----------------------------------------
Bug #21205: File::Stat#birthtime is available on Linux
https://bugs.ruby-lang.org/issues/21205#change-112497

* Author: BertramScharpf (Bertram Scharpf)
* Status: Open
* ruby -v: ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux]
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
Not that I would run into any problem with it, but this behaviour is confusing:

    RbConfig::CONFIG["platform"]     #=> "amd64-freebsd14"
    (File.birthtime "/").class       #=> Time
    (File.stat "/").birthtime.class  #=> Time

    RbConfig::CONFIG["platform"]     #=> "x86_64-linux"
    (File.birthtime "/").class       #=> Time
    (File.stat "/").birthtime        # raises NotImplementedError




-- 
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.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-core:121480] [Ruby Feature#21205] Make File::Stat#birthtime available on Linux
  2025-03-30  7:27 [ruby-core:121475] [Ruby Bug#21205] File::Stat#birthtime is available on Linux BertramScharpf (Bertram Scharpf) via ruby-core
  2025-03-30  9:13 ` [ruby-core:121476] " byroot (Jean Boussier) via ruby-core
  2025-03-31  5:48 ` [ruby-core:121479] " BertramScharpf (Bertram Scharpf) via ruby-core
@ 2025-03-31  8:25 ` byroot (Jean Boussier) via ruby-core
  2 siblings, 0 replies; 4+ messages in thread
From: byroot (Jean Boussier) via ruby-core @ 2025-03-31  8:25 UTC (permalink / raw)
  To: ruby-core; +Cc: byroot (Jean Boussier)

Issue #21205 has been updated by byroot (Jean Boussier).

Tracker changed from Bug to Feature
Subject changed from File::Stat#birthtime is available on Linux to Make File::Stat#birthtime available on Linux
ruby -v deleted (ruby 3.3.7 (2025-01-15 revision be31f993d7) [x86_64-linux])
Backport deleted (3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN)

Switching this to a feature request.

----------------------------------------
Feature #21205: Make File::Stat#birthtime available on Linux
https://bugs.ruby-lang.org/issues/21205#change-112498

* Author: BertramScharpf (Bertram Scharpf)
* Status: Open
----------------------------------------
Not that I would run into any problem with it, but this behaviour is confusing:

    RbConfig::CONFIG["platform"]     #=> "amd64-freebsd14"
    (File.birthtime "/").class       #=> Time
    (File.stat "/").birthtime.class  #=> Time

    RbConfig::CONFIG["platform"]     #=> "x86_64-linux"
    (File.birthtime "/").class       #=> Time
    (File.stat "/").birthtime        # raises NotImplementedError




-- 
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.ruby-lang.org/

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-03-31  8:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-30  7:27 [ruby-core:121475] [Ruby Bug#21205] File::Stat#birthtime is available on Linux BertramScharpf (Bertram Scharpf) via ruby-core
2025-03-30  9:13 ` [ruby-core:121476] " byroot (Jean Boussier) via ruby-core
2025-03-31  5:48 ` [ruby-core:121479] " BertramScharpf (Bertram Scharpf) via ruby-core
2025-03-31  8:25 ` [ruby-core:121480] [Ruby Feature#21205] Make File::Stat#birthtime " byroot (Jean Boussier) via ruby-core

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).