読者です 読者をやめる 読者になる 読者になる

パルカワ2

PerlとRubyとイチャラブ

gitにコミットされた回数を取ってくる。

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;
}