Feature #9647

File::Stat#birthtimeの追加

Added by Yui NARUSE about 1 year ago. Updated 11 months ago.

[ruby-dev:48048]
Status:Closed
Priority:Normal
Assignee:Yukihiro Matsumoto

Description

File::Stat#birthtimeを追加しませんか。

以下の様なシステムの stat(2) には st_birthtimespec があり、
(ctime = change time ではなく) ファイルを作成した日時を得ることができます。
http://netbsd.gw.com/cgi-bin/man-cgi?stat+2+NetBSD-current
http://www.freebsd.org/cgi/man.cgi?query=stat&sektion=2&apropos=0&manpath=FreeBSD+10.0-RELEASE
https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man2/stat.2.html

また、Windowsはbirthtimeがあるがctimeがないという環境ですので、birthtimeはctimeを返します。
http://msdn.microsoft.com/ja-jp/library/ms350241(v=vs.71).aspx

今回のパッチではLinuxやOpenBSDなど、struct statにbirthtimeがない環境では、
Windows同様ctimeを返すようにしています。
(が、意味が違うからWindows以外ではNotImpErrorの方がいいかも)

https://github.com/nurse/ruby/compare/ruby:trunk...birthtime


Related issues

Related to Ruby trunk - Feature #9857: Pathname#birthtime Closed 05/22/2014

Associated revisions

Revision 46047
Added by Yui NARUSE 11 months ago

  • file.c (stat_birthtime): add birthtime support [Feature #9647]

  • file.c (rb_stat_birthtime): add File::Stat.birthtime

  • file.c (rb_file_s_birthtime): add File.birthtime

  • file.c (rb_file_birthtime): add File#birthtime

  • configure.in: check struct stat.st_birthtimespec.

Revision 46047
Added by Yui NARUSE 11 months ago

  • file.c (stat_birthtime): add birthtime support [Feature #9647]

  • file.c (rb_stat_birthtime): add File::Stat.birthtime

  • file.c (rb_file_s_birthtime): add File.birthtime

  • file.c (rb_file_birthtime): add File#birthtime

  • configure.in: check struct stat.st_birthtimespec.

History

#1 Updated by Motohiro KOSAKI about 1 year ago

Linuxの場合、媒体にはbirthtimeが記録されていて、syscallの追加が自転車置き場の議論で進まないという感じなのでctimeが帰ってくるのはうれしくないなあ。将来的に混乱が予想されるので。

いまでもrootならdebugfs使って作成日とれます。
この辺参照してください(一番下) http://stackoverflow.com/questions/5929419/how-to-get-file-creation-date-in-linux

こっから先は雑談なんだけど、なにが自転車置き場の議論かというと、birthtime追加 → やったSambaの実装が楽になるよ! → だがちょっと待って欲しい、Windowsはctimeユーザが変更できる、それが出来ないならSambaで使えない → それもう birthtimeじゃねーだろアホか → えーい、usecaseで揉めるような機能なら入れない!!
という非常にばかばかしい議論をしたことがあるのだ。

#2 Updated by Motohiro KOSAKI about 1 year ago

更に雑談をつづけてしまうと Windowsには file system tunnelling という機能があり、われわれが birthtimeという文脈で
話すファイル作成日とは若干セマンティクスが違う

http://stackoverflow.com/questions/661977/why-windows-sets-new-created-files-created-time-property-to-old-time

ので、名前が birthtime でいいかどうか Windows方面の人の意見を聞いたほうがいいかもしれない。

ところで、昔LKMLでだれかからWindowsはctimeのほかにユーザが自由に時刻をいじれない真のファイル作成日も媒体に
記録されていると聞いた記憶があったのだが、簡単にぐぐった限りではそんな情報はみあたらなかった。だれかそのへん
詳しい人がいたら教えていただけると助かります。

#3 Updated by Usaku NAKAMURA about 1 year ago

NTFSでは$STANDARD_INFOMATIONと$FILE_NAMEのそれぞれに日時系メタデータが入っていますが、後者を変更するAPIは存在しないので、たぶんそれのことかと思います。
しかし、「真のファイル作成日」というよりは、そのファイル名の名付け日(例えばハードリンクを作ったならその日時)なので、ちょっと意味合いは違いますね。

#4 Updated by Yui NARUSE about 1 year ago

Motohiro KOSAKI wrote:

Linuxの場合、媒体にはbirthtimeが記録されていて、syscallの追加が自転車置き場の議論で進まないという感じなのでctimeが帰ってくるのはうれしくないなあ。将来的に混乱が予想されるので。

いまでもrootならdebugfs使って作成日とれます。
この辺参照してください(一番下) http://stackoverflow.com/questions/5929419/how-to-get-file-creation-date-in-linux

こっから先は雑談なんだけど、なにが自転車置き場の議論かというと、birthtime追加 → やったSambaの実装が楽になるよ! → だがちょっと待って欲しい、Windowsはctimeユーザが変更できる、それが出来ないならSambaで使えない → それもう birthtimeじゃねーだろアホか → えーい、usecaseで揉めるような機能なら入れない!!
という非常にばかばかしい議論をしたことがあるのだ。

はい。
なもんでLinuxが実装するの待っていたんですが、もう見捨てるという結論にしました(どーん

Windowsの方はなるほど…なので、とりあえずWindowsもNotImpErrorにしてうささんに実装してもらいますかね(ゎ

#5 Updated by Usaku NAKAMURA about 1 year ago

Yui NARUSE wrote:

Windowsの方はなるほど…なので、とりあえずWindowsもNotImpErrorにしてうささんに実装してもらいますかね(ゎ

いやあの、Windowsはそれでいいので付けといてください(笑)
今のctimeのことを考えると、多少の意味の違いなんかどうでもいい感があります。

#6 Updated by Yui NARUSE 11 months ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

Applied in changeset r46047.


  • file.c (stat_birthtime): add birthtime support [Feature #9647]

  • file.c (rb_stat_birthtime): add File::Stat.birthtime

  • file.c (rb_file_s_birthtime): add File.birthtime

  • file.c (rb_file_birthtime): add File#birthtime

  • configure.in: check struct stat.st_birthtimespec.

#7 Updated by Kazuhiro NISHIYAMA 11 months ago

Also available in: Atom PDF