あとでどこかに清書するための日本語版の端書で、RuboCop Core から RuboCop Performance と RuboCop Rails の別 Gem を切り出す際の手順メモ。
RuboCop Core から cp
によるファイルコピーだっため git の履歴が飛んでいたのをどうにかしたかったのが動機。
まず lib ディレクトリと spec ディレクトリに対して cherry-pick
が必要な作業数。RuboCop Performance と RuboCop Rails の算出。なお、g
は git
の g
となる。
% g log --oneline lib/rubocop/cop/performance spec/rubocop/cop/performance | wc -l 225 % g log --oneline lib/rubocop/cop/rails spec/rubocop/cop/rails | wc -l 315
まず数の少ない RuboCop Performance から行なった。RuboCop Rails はそれがうまく行ってからの作業としている。
既存リポジトリでも良いが、完全にやり直しの効くよう新たに一時作業用のリポジトリを立てていた。
mkdir rubocop-performance-revise g init g remote add upstream-performance https://github.com/rubocop-hq/rubocop-performance g remote add upstream-core https://github.com/rubocop-hq/rubocop g fetch upstream-performance g fetch upstream-core
g remote add upstream-core
は RuboCop Core からインポートするためのもの。
すでにコミットしてある RuboCop Performance からも cherry-pick
を行うため g remote add upstream-performance
としている。
それぞれの remote リポジトリから必要なコミットを持ってくる。
以下のように素直に持ってこれるコミットは問題がない。
% g cherry-pick 7cbfa5a63a2ec337a1d36cf0bbd20d8196cbf0bf [wip_revise 845e7bf4d] Add MIT license Author: Daniel Colson <danieljamescolson@gmail.com> Date: Fri Jun 29 15:58:14 2018 -0400 1 file changed, 20 insertions(+) create mode 100644 LICENSE.txt % g cherry-pick c551accab8ce0710c6248163d7aeccb1819751ba [wip_revise a8c12a5da] Create gemspec for initial version Author: Daniel Colson <danieljamescolson@gmail.com> Date: Fri Jun 29 17:05:03 2018 -0400 3 files changed, 44 insertions(+) create mode 100644 lib/rubocop-performance.rb create mode 100644 lib/rubocop_performance/version.rb create mode 100644 rubocop-performance.gemspec
コンフリクトした場合は都度解決。
Unmerged paths: (use "git add <file>..." to mark resolution) both modified: spec/spec_helper.rb
明白にローカルを優先する場合は git checkout --ours
が手早い。
% g co --ours spec/spec_helper.rb
以下のように cherry-pick
した際に、Untracked files として不要なファイルが入った場合。
Untracked files: (use "git add <file>..." to include in what will be committed) (snip)
以下でまるっと消したりしていた。
% g st -s | grep '^DU ' | cut -d ' ' -f 2 | xargs git rm
全体としてもっとクールな手順はあるかもしれないが、一手法の端書まで。