Open3

gitdb: Bare Gitリポジトリをデータベースとして使う

okuokuokuoku

Gitリポジトリをデータベースとして使う ってのはかなり色々とやってるけど、その都度書き込みルーチンを書いてるのが気になるのでライブラリとして纏められないか問題。

prev

https://zenn.dev/okuoku/scraps/ca4df2d0ad9043

okuokuokuoku

ReadQueue / WriteQueue

基本的には非同期で動く想定とする。つまり、gitリポジトリにReadQueueやWriteQueueを接続してコマンドを送る形になる。

どちらも明示的に dispose する必要がある。

ReadQueue

create(gitdir) => Q
q.get(ref, path) => JSON
q.dispose() => {}

path はファイルパスをあらわす。拡張子センシティブ。

WriteQueue

create(gitdir, tempdir) => q
q.set(path, JSON) => sha1
q.commit(ref, opts) => commit
q.dispose() => {}

create には tempdir として書き込み可能なテンポラリディレクトリを指定する。テンポラリディレクトリはユニークでなければならない。

set はindexにファイルを追加する。 commit するまで内容は更新されない。

commit 操作はオプションを受けとる。オプションは、

{
 msg: "コミットメッセージ",
 user: "author",
 email: "author E-mail",
 name: "author name",
 date: ...,
 committer: "committer",
 committer_email: "committer E-mail",
 committer_name: "committer name",
 committer_date: ...
}
okuokuokuoku

書き込みロジック

... 要するにこの辺の環境変数を設定して git を起動するだけのwrapperとなる。C実装はlibgit2にしたいけど。

GIT_INDEX_FILE
GIT_WORK_TREE
GIT_DIR

GIT_AUTHOR_EMAIL
GIT_AUTHOR_DATE
GIT_AUTHOR_NAME

 :

indexの準備 (read-tree)

ファイルのhash

update-index

write-tree

commit-tree