jfluteです
そして、二つ目の実装案です。
<< 実装案B: 直近チェック済ディレクトリでテキスト展開 >>
チェックされた AlterDDL は、AlterCheckが成功して差分がなくなったら、
history配下の (例えば) latest-checked ディレクトリにテキストファイルのまま退避される。
latest-checked配下がそのまま、そのスプリントでのリリース対象DDLとなる。
SavePreviousすることで初めて finished-alter...zip になる。
以前のDB変更を修正したいときは、latest-checkedから展開されたalter配下のSQLを修正するだけ。
※latest-checked とか READONLY_ の具体的な名前は検討中です。
latest-checkedは他に... already-checked, checked-and-unreleased, などなど
READONLY_は他に... DBFLUTE_MANAGED_, ALREADY_CHECKED_, などなど
```
dbflute_maihamadb
|-...
|-playsql
| |-migration
| | |-alter
| | | |-alter-schema-ABC001.sql // latest-checkedから復元
| | | |-alter-schema-ABC002.sql // latest-checkedから復元
| | | |-alter-schema-ABC003.sql // 手動で新規作成 (将来Introで自動生成したい)
| | |
| | |-history
| | | |-[date directory] // もはやgitignoreでも良い
| | | | |-[date-time directory] e.g. 20190415_0123
| | | | | |-finished-alter-...zip // ☆もう finished のzipしかなくなる
| | | | |
| | | | ...
| | | |
| | | |-latest-checked // ☆SavePreviousするまでは、すべてここに
| | | | |-DONT_EDIT_HERE.dfmark // こういうの作っておくか?
| | | | |-READONLY_alter-schema-ABC001.sql
| | | | |-READONLY_alter-schema-ABC002.sql
| | | | |-checked-for-previous-20190712-2222.dfmark //
中にファイル名を列挙するとコンフリクトなので空ファイル
| | | | |
| | | | |-(alter-schema-ABC000.sql) // 過去スプリントが混じるとこうなる
| | | | |-(checked-for-previous-20190601-1111.dfmark) //
★別に個別ファイルはわからなくていいかな!?いざとなればgitの差分見れば良い
| | |
| | |-previous
| | | |-previous-20190712-2222.zip
| | | |-(previous-20190601-1111.zip) // 過去スプリントが混じるとこうなる (現状は無視されて後で削除される)
| | | |-target-previous.dfmark // ★これでスプリント混じりはわざとgitコンフリクトする?
```
メリット:
o 並列作業で何かあっても普通にテキストファイルのgitコンフリクトになる
o alterディレクトリはgitignoreのままで物理的な互換性は強い
o alterディレクトリは作業領域、historyはフレームワーク管理領域、今まで同じで精神的な互換性は強い
=> zipやめてリリース前のものがひとまとまりになっただけと言える
o タイミング的互換性も、以前のzip展開処理を残しておきさえすれば実現できそう
o DBFlute実装コスト、そして、DBFlute Introへのインパクトはまあまあ少ない(はず)
o ひとつの alter-schema.sql に集約しているパターンでも普通に実施できる
o チェックされてるブランド(安心性)はまあまあ、latest-checked はチェックされている
デメリット:
o 過去スプリント混じったときに、previousとの対比が少しわかりづらい
=> 過去スプリント混じりは、そもそもgitコンフリクトにさせる (markファイルにて)
o とはいえ latest-checked を修正しちゃう人いないだろうか?
=> なので、フレームワーク管理領域感の強い history の配下に
=> "SQLファイルprefix" や DONT_EDIT_HERE.dfmark で「ついつい作成・修正」をできるだけ防止
jfluteの所感:
バランス良くほうぼうの要件を満たせている。
いかに latest-checked を直接修正させないようにするかだけに注力すれば他は難はあまりない。
...
全体的な補足:
実装案に関わらず、スプリントまたがりのマージは、
target-previous.dfmark でわざとgitコンフリクトさせて、
意識してマージしてもらったほうがいいのかなと思っています。
dfmarkファイルに「ちゃんともう一回AlterCheckしてね」と書いておくとか。