-
-
Save Songmu/3867745ee894785b71f4c7eea11a7803 to your computer and use it in GitHub Desktop.
| #!/usr/bin/env perl | |
| use 5.014; | |
| use warnings; | |
| use utf8; | |
| use autodie; | |
| use Time::HiRes qw/gettimeofday tv_interval/; | |
| # you need `ghg` command to work it | |
| my $workdir = '.tmp'; | |
| my $trial = 100; | |
| my @vers = reverse qw/ | |
| v0.14.2 | |
| v0.14.1 | |
| v0.14.0 | |
| v0.13.1 | |
| v0.13.0 | |
| v0.12.9 | |
| v0.12.8 | |
| v0.12.6 | |
| v0.12.5 | |
| v0.12.4 | |
| v0.12.3 | |
| v0.12.2 | |
| v0.12.1 | |
| v0.12.0 | |
| v0.11.2 | |
| v0.11.1 | |
| v0.11.0 | |
| v0.10.2 | |
| v0.10.1 | |
| v0.10.0 | |
| v0.9.0 | |
| v0.8.0 | |
| /; | |
| $ENV{GHG_HOME} = $workdir; | |
| sub logf { | |
| my $msg = sprintf(shift, @_); | |
| $msg .= "\n" if $msg !~ /\n\z/ms; | |
| print STDERR $msg; | |
| } | |
| for my $ver (@vers) { | |
| my $bin = "$workdir/bin/ghq-$ver"; | |
| next if -f $bin; | |
| logf 'installing ghq %s', $ver; | |
| my $cmd = "ghg get -u motemen/ghq\@$ver"; | |
| `$cmd > /dev/null 2>&1`; | |
| rename "$workdir/bin/ghq", $bin; | |
| } | |
| my $VCS_GIT = '-vcs=git'; | |
| logf 'starting benchmark'; | |
| chomp(my $repos = `$workdir/bin/ghq-v0.14.2 list | wc -l`); | |
| logf '%d repositories on local', $repos; | |
| my %results; | |
| for my $i (1..$trial) { | |
| logf 'trial: %d', $i; | |
| for my $ver (@vers) { | |
| my $bin = "$workdir/bin/ghq-$ver"; | |
| for my $opt ('', $VCS_GIT) { | |
| if ($opt eq $VCS_GIT) { | |
| if ($ver !~ /^v0\.1/ || $ver lt 'v0.11.1') { | |
| next; | |
| } | |
| } | |
| my $t = [gettimeofday]; | |
| `$bin list $opt > /dev/null`; | |
| my $elapsed = tv_interval $t; | |
| if ($? > 0) { | |
| die 'error occurred on version: '. $ver; | |
| } | |
| $results{$ver . $opt} += $elapsed; | |
| } | |
| } | |
| } | |
| for my $ver (@vers) { | |
| my $val = $results{$ver}; | |
| printf "%s: %0.5f\n", $ver, ($val/$trial); | |
| my $ver_with_git = $ver . $VCS_GIT; | |
| if (my $val = $results{$ver_with_git}) { | |
| printf "%s: %0.5f\n", $ver_with_git, ($val/$trial); | |
| } | |
| } |
v0.8.0: 0.11212
v0.9.0: 0.15968
v0.10.0: 0.14563
v0.10.1: 0.14683
v0.10.2: 0.14698
v0.11.0: 0.19084
v0.11.1: 0.16911
v0.11.1-vcs=git: 0.16772
v0.11.2: 0.16753
v0.11.2-vcs=git: 0.16848
v0.12.0: 0.16859
v0.12.0-vcs=git: 0.16974
v0.12.1: 0.16861
v0.12.1-vcs=git: 0.16902
v0.12.2: 0.16753
v0.12.2-vcs=git: 0.16822
v0.12.3: 0.16832
v0.12.3-vcs=git: 0.16926
v0.12.4: 0.17000
v0.12.4-vcs=git: 0.16976
v0.12.5: 0.17013
v0.12.5-vcs=git: 0.16907
v0.12.6: 0.16950
v0.12.6-vcs=git: 0.16919
v0.12.8: 0.09405
v0.12.8-vcs=git: 0.09457
v0.12.9: 0.09557
v0.12.9-vcs=git: 0.09529
v0.13.0: 0.09531
v0.13.0-vcs=git: 0.09547
v0.13.1: 0.09611
v0.13.1-vcs=git: 0.11594
v0.14.0: 0.08618
v0.14.0-vcs=git: 0.10492
v0.14.1: 0.08328
v0.14.1-vcs=git: 0.11814
v0.14.2: 0.07938
v0.14.2-vcs=git: 0.12020
v0.15.0: 0.07899
v0.15.0-vcs=git: 0.11862
868 repositories on local
v0.8.0: 0.03433
v0.9.0: 0.07397
v0.10.0: 0.07765
v0.10.1: 0.07701
v0.10.2: 0.07757
v0.11.0: 0.08700
v0.11.1: 0.08929
v0.11.1-vcs=git: 0.08974
v0.11.2: 0.09140
v0.11.2-vcs=git: 0.09050
v0.12.0: 0.08982
v0.12.0-vcs=git: 0.09041
v0.12.1: 0.08845
v0.12.1-vcs=git: 0.08808
v0.12.2: 0.08812
v0.12.2-vcs=git: 0.09060
v0.12.3: 0.08907
v0.12.3-vcs=git: 0.08915
v0.12.4: 0.08874
v0.12.4-vcs=git: 0.08831
v0.12.5: 0.08957
v0.12.5-vcs=git: 0.08954
v0.12.6: 0.08884
v0.12.6-vcs=git: 0.08823
v0.12.8: 0.03426
v0.12.8-vcs=git: 0.03365
v0.12.9: 0.03527
v0.12.9-vcs=git: 0.03467
v0.13.0: 0.03578
v0.13.0-vcs=git: 0.03531
v0.13.1: 0.03619
v0.13.1-vcs=git: 0.02917
v0.14.0: 0.03199
v0.14.0-vcs=git: 0.02689
v0.14.1: 0.03097
v0.14.1-vcs=git: 0.02732
v0.14.2: 0.02998
v0.14.2-vcs=git: 0.02963