puts "Importing repo ourteam/FOO/bar"
imp = GiteaImport::ProjectImporter.new(clnt, root, {
import_source: 'ourteam/bar',
target_namespace: 'ourteam/FOO',
new_name: 'bar',
})
imp.execute
proj15 = imp.project
review5 = Review.create!(
author: (User.find_by_email 'foobar@example.com'),
project: proj15,
merge_request: MergeRequest.find_by(project: proj15, iid: 2),
created_at: '2021-05-28T03:54:40Z')
…そんなスクリプトをプログラムで生成し…
./GiteaQuery.pm generate_repo_importer \
$mygroup > importer.rb
# 生成ツールの中身は perl なので自粛
… gitlab-rails runner に食わせる
sudo gitlab-rails runner $PWD/impoter.rb
もちろん、最初は gitlab-rails console から load
で少しずつ結果を確認しながら合わせ込み
redmine の SQLite の db だけ持ち帰り、gitea の時と同じように、import用 ruby スクリプトを生成
issue10 = Issue.create!(author: User.find_by_email('foobar@example.com') || User.find(1),
project: Project.find_by_full_path('foobar/issues'),
closed_at: '2019-11-08T08:49:04Z',
iid: 10,
state: :closed,
created_at: '2019-05-17T06:08:51Z',
title: 'アンケート本体の全体タスク',
description: '',
updated_at: '2019-11-08T08:49:04Z')
Note.create!(project: (Project.find_by_full_path 'foobar/issues'),
noteable: issue10,
author: User.find_by_email('foobar@example.com') || User.find(1),
created_at: '2019-11-08T08:49:04Z',
note: '分類を変えたので、閉じます。')
prj = Project.find_by_full_path 'foobar/issues'
IssueLink.create!(source: prj.issues.find_by_iid(1),
target: prj.issues.find_by_iid(3),
created_at: '2019-05-17T06:08:50Z')
IssueLink.create!(source: prj.issues.find_by_iid(2),
target: prj.issues.find_by_iid(3),
created_at: '2019-05-17T06:08:50Z')
prj = Project.find_by_full_path 'foobar/issues'
o = Projects::OpenIssuesCountService.new(prj)
o.count
o.refresh_cache
o.count
データはプログラムよりも重く尊い
LL で記述された CMS は import ターゲット向き
プログラムとして export し、実行で import
チーム/プロジェクト/リポジトリ
X/Y/Z#番号
irb(main):001:0> n = Note.find(12575)
=> #<Note id: 12575, note: [FILTERED], noteable_type: "Issue", author_id: 5, created_at: "2022-02-18 14:01:22.494215000 +0900",...
irb(main):002:0> n.note
=> "コメントですよあああ"
irb(main):003:0> n.note + 'foobar'
=> "コメントですよあああfoobar"
irb(main):004:0> n.update!(note: n.note + ' いいいい')
=> true
irb(main):005:0>
hkoba と申します。名ばかりのフリーランスプログラマです。 今日は 〜お話しさせて頂きます。
はじめにお断りです。この話はあくまで個人的な成功事例です。 同じ方法が今後もうまく行くとは保証できません。ご了承下さい。
さて、私が初めて運用した Issue Tracker は CVSTrac でした。本当は早く廃止したいのですが、今も最重要なコードの Issue 管理を担っています。 脱出先の候補として、様々な Issue Tracker をサイドプロジェクト用に試して来ました。その末に、たどり着いたのが GitLab というわけです。
で実際、〜どうだったかですが、
最初は公式機能を試しました。 Web画面をプチプチするだけで使えます。 数が多いと手間ですが。 で、リポジトリの移行はうまく行ったのですが、 issue は、数が多いと取りこぼされる、 Pull Request 上のコードレビューコメントが捨てられる Commit メッセージで issue 参照を書いても、issue 側からは commit が見えない など、不満がありました。
じゃぁ、データの取りこぼしが有っても(今動いている gitea を捨てて)強引に GitLab に移行するの? というと、それは私は嫌でした。 この時の gitea は新人教育プロジェクトで用いていたので、(単に GitLab 使いたいからで)新人さんにユーザーデータを捨てるところを見せたくなかったのです。 システムファーストじゃなく、顧客データファーストの姿勢を見せたかった
よろしい、ならば自力救済だ! (どれだけ巨大であっても)GitLab は結局 Rails アプリには違いない rails console で対話的に実験できるので、 中のモデル群、サービスクラス、APIクライアントを叩いて、 正しい使い方を学ぶことが出来る それは今後の運用にも役立つ知識になるだろう
というわけで、〜〜 ということを16週間ほどかけて行いました