@ledsun blog

Hのキーがhellで、Sのキーがslaveだ、と彼は思った。そしてYのキーがyouだ。

続 Gitのdiffを振り返る

Gitのdiffを振り返る - @ledsun blog でGitの記録から、約2年間の毎日のファイルの変更行数を見ました。 1日に4000行の人力では不可能に思える変更が見つかりました。 今度は巨大な変更を含むコミットを探してみましょう。

次のRubyスクリプトを使います。

require 'date'

EXCLUDE = "':(exclude)package-lock.json' ':(exclude)*.min.js' ':(exclude)*.css' ':(exclude)dist/*' ':(exclude)dev/vender' ':(exclude)src/lib/modules' ':(exclude)*.md'"

start_date = Date.parse $*.shift
end_date = Date.parse $*.shift
limit = $*.shift.to_i

git_rev_list_command = "git rev-list --after='#{start_date} 00:00' --before='#{end_date} 23:59' current"
p git_rev_list_command

revs = `#{git_rev_list_command}`.split("\n")
revs.reverse.each do |revision|
  result_of_git_show = `git show --shortstat --oneline #{revision} #{EXCLUDE}`
  short_stat = result_of_git_show.split("\n")[1]
  next unless short_stat

  insertions, deletions = short_stat.split(",")[1..].map { _1.to_i}
  next unless insertions
  next unless deletions

  if insertions > limit || deletions > limit
    system "git show #{revision} --format=format:'%H%n%ai%n%s' --shortstat #{EXCLUDE}"
    puts "\n"
  end
end

実行してみると、次の結果が得られました。 1000行以上の変更をしているコミットを探しました。

~ ruby gitdiffindate.rb 2019/05/22 2020/12/31 1000
"git rev-list --after='2019-05-22 00:00' --before='2020-12-31 23:59' current"
663c84dbf80a105b22078418f87c2474ac9487a5
2019-07-24 14:58:23 +0900
code-style: Introduce the Prettier code formatter
 330 files changed, 3990 insertions(+), 1883 deletions(-)

5c3f2c2122f676df8f91a03df5ef12830082cb93
2019-07-24 15:01:49 +0900
code-style: Ban one-var
 56 files changed, 1077 insertions(+), 1086 deletions(-)

cf2acd9f917e2652048df97050c0e885aaec0731
2019-11-12 11:18:55 +0900
refactor: Format annotation files
 10 files changed, 2543 insertions(+), 2158 deletions(-)

d5c2b8881c9edbececee8b7753a8f04b2dd3f5cd
2019-11-19 15:35:29 +0900
refactor: Format less files
 6 files changed, 1181 insertions(+), 968 deletions(-)

5bb834fca322388da6b3ca94db99e4910f6f774a
2019-11-07 20:28:24 +0900
feature: Show attribute tabs in the Pallet
 25 files changed, 1180 insertions(+), 69 deletions(-)

発見したコミットログを見ると、ほとんどがツールを使ったフォーマット変更でした。

feature: Show attribute tabs in the Palletは、機能追加です。 機能追加とはいえ、1コミットで1000行入れるのは、我ながらよくなかったと反省です。

この5つのコミットが2019-07-292019-12-02に集計された結果、1日4000行オーバーになっていました。 つまりノイズです。これらの異常値を除いてグラフを作り直してみます。

f:id:ledsun:20201227231409p:plain
異常値を除いた一日毎のファイルの変更行数

今度は2000行近い変更が異常値に思えてきました。