git log --oneline --no-merges <file> | wc -l
UnityのAssetBundlesのバージョンを作るのに使いました。
最初は、最近コミットされた時間をepochにすればええんちゃうと思ったんですが、jsonファイルがでかくなるから嫌だと言われました。
Path::Class::Dirのrecurseクソ便利だと思う。
sub assetbundle_versions { my ($self) = @_; my %versions; for my $device (@{$self->devices}) { my $dir = $self->assetbundle_dir->subdir($device); $dir->recurse( callback => sub { my ($file) = @_; return if $file->is_dir; my $version = `git log --oneline --no-merges $file | wc -l` || 0; $version =~ s/\D//g; my $name = basename($file); $name = (split /\./, $name)[0]; $versions{$device}->{$name} = $version; }, ); } return \%versions; }