Wiki開発者ガイドライン

GitLab 13.5 で導入されました

GitLabのWiki機能はGollum 4.xをベースにしています。GitalyRubyサービスで使われ、RailsアプリからGitaly RPCコールを通してアクセスします。

Wiki は Git リポジトリをバックエンドとして使用し、Gitaly RPC 呼び出しを通して Rails アプリからアクセスできます:

GitLab 13.5で導入されたWikiは、プロジェクトだけでなくグループでも利用できます。

関係する Gems

Wikiに使用される代表的なジェムは以下の通りです:

コンポーネント説明宝石名GitLabプロジェクトアップストリームプロジェクト
gitlabマークアップレンダラ。gitlab-markupgitlab-org/gitlab-markupgithub/markup
gollum-libメインGollumライブラリgitlab-gollum-libgitlab-org/gollum-libgollum/gollum-lib
 Rugged 用 Git アダプタ Gollumgitlab-gollum-rugged_adaptergitlab-org/gitlab-gollum-rugged_adaptergollum/rugged_adapter
 Rugged (Gitaly自体でも使われています)rugged-libgit2/rugged

ゴラムについて

Wikiページのスラッグとリポジトリ内のファイル間のマッピングを処理するためのストレージ抽象化レイヤーとしてのみGollumを使用しています。

Wikiページをレンダリングするとき、私たちはGollumを全く使用せず、代わりにカスタムBanzaiパイプラインを通過します。これにより、Gollum[[link]] 構文のようなWiki 固有のマークアップが追加されます。

私たちはGollumの機能のほとんどを利用していないため、いつかは完全にGollumから離れる予定です。参考までにこのエピックを見てください。

モデルクラス

Wiki クラスは Wiki リポジトリのメイン抽象です。Project もしくはGroup のコンテナで初期化される必要があります:

classDiagram Wiki --> ProjectWiki Wiki --> GroupWiki class Wiki { #container #repository } class ProjectWiki { #project → #container } class GroupWiki { #group → #container }

いくつかのモデルはGitalyとGollumから似たようなクラスをラップしています:

RailsモデルGitalyクラスゴラム
WikiGitlab::Git::WikiGollum::Wiki
WikiPage Gitlab::Git::WikiPage,Gitlab::Git::WikiPageVersion Gollum::Page
 Gitlab::Git::WikiFileGollum::File

一部のデータのみがデータベースに永続化されます:

モデル説明
WikiPage::MetaWikiページのメタデータ
WikiPage::SlugWikiページの現在のスラッグと以前のスラッグ
ProjectRepositoryプロジェクトWikiのGitalyストレージデータ
GroupWikiRepositoryグループWiki用Gitalyストレージデータ

添付ファイル

Web UIはREST APIを通して添付ファイルをアップロードし、Wikiリポジトリにコミットとしてファイルを保存します。