Skip to main content

tig_core/
lib.rs

1//! no_std 前提の git client core。
2//!
3//! 外部 crate に依存せず、`alloc` のみを要求する。I/O を持たず、入力は常に
4//! `&[u8]` として受け取る (組み込みでは flash 上のデータを直接参照できる)。
5//!
6//! feature 構成:
7//! - (常時): oid、SHA-1、zlib inflate、loose object の parse
8//! - `pack`: packfile v2 の解析と delta 解決
9//! - `bundle`: bundle v2/v3 の読み書き (`pack` を内包)
10//! - `history`: committer date 順の history walk
11//! - `transport-http`: protocol v2 の request 構築と response 解析 (sans-io)
12//! - `fetch`: smart HTTP からの clone 状態機械 (`transport-http` + `bundle`)
13//! - `write`: object (tree / commit) の生成と packfile の書き出し
14//! - `push`: smart HTTP への push 状態機械 (receive-pack、`write` + `transport-http`)
15//! - `checkout`: tree の展開 (filesystem は frontend の責務)
16
17#![cfg_attr(not(test), no_std)]
18
19extern crate alloc;
20
21pub mod err;
22pub mod object;
23pub mod oid;
24pub mod sha1;
25pub mod zlib;
26
27#[cfg(feature = "pack")]
28pub mod delta;
29#[cfg(feature = "pack")]
30pub mod pack;
31
32#[cfg(feature = "bundle")]
33pub mod bundle;
34
35#[cfg(feature = "history")]
36pub mod history;
37
38#[cfg(feature = "transport-http")]
39pub mod pkt;
40#[cfg(feature = "transport-http")]
41pub mod protov2;
42
43#[cfg(feature = "fetch")]
44pub mod clone;
45
46#[cfg(feature = "write")]
47pub mod build;
48
49#[cfg(feature = "push")]
50pub mod protov0;
51#[cfg(feature = "push")]
52pub mod push;
53
54#[cfg(feature = "checkout")]
55pub mod checkout;
56
57use alloc::vec::Vec;
58
59/// object database の読み出し抽象。pack、loose object、メモリ上のストア等が実装する。
60pub trait Odb {
61    /// oid に対応する object の種別と内容 (header を除いた body) を返す。
62    /// 存在しない場合は None。
63    fn read(&self, oid: &oid::Oid) -> Option<(object::Kind, Vec<u8>)>;
64}