SVN::Clientモジュールから最終変更日時を取得する
#!/usr/bin/perl use strict; use warnings; use SVN::Client; my $ctx = new SVN::Client; $ctx->info("/hoge/fuga", undef, 'HEAD', sub { my ($path, $info, $pool) = @_; print $path, "\n"; print $info->last_changed_date, "\n"; }, 1); my $list = $ctx->ls("/hoge/fuga", 'HEAD', 0); for (keys(%$list)) { my $info = $list->{$_}; print "$_\n"; print $info->time, "\n"; }
からそれぞれ時間情報が取得できる。
とは言えこれだけでは謎の数字が出てくるだけで、何が何だか分からない。
これらの構造体定義は以下。
Apache Subversion Source Code
Apache Subversion Source Code
いずれも、時間情報は"apr_time_t"という型で記述されているらしい。
で、調べてみると。
Apache Portable Runtime: Time Routines
- typedef apr_int64_t apr_time_t
number of microseconds since 00:00:00 january 1, 1970 UTC
ちょ microsecondsってww どんだけ正確に時間測ってんだwww
perlでの時間の扱いは
Returns the number of non-leap seconds since whatever time the system considers to be the epoch (that's 00:00:00, January 1, 1904 for MacOS, and 00:00:00 UTC, January 1, 1970 for most other systems). Suitable for feeding to gmtime() and localtime().
time - perldoc.perl.org
となっている。起点は同じだけど秒数だから"apr_time_t"と比べると6桁少ない。
というわけでこういう形にしてみた。
#!/usr/bin/perl use strict; use warnings; use SVN::Client; use HTTP::Date; my $ctx = new SVN::Client; $ctx->info("/hoge/fuga", undef, 'HEAD', sub { my ($path, $info, $pool) = @_; print $path, "\n"; print time2str($info->last_changed_date / 1000000), "\n"; }, 1); my $list = $ctx->ls("/hoge/fuga", 'HEAD', 0); for (keys(%$list)) { print "$_\n"; my $info = $list->{$_}; print time2str($info->time / 1000000), "\n"; }