Arquitetura¶
Esta página descreve a arquitetura implementada no código atual do GitDatabase.
Workspace e crates¶
O projeto é um workspace Rust com os seguintes crates:
gitbase-cli: interface de linha de comando e orquestração dos fluxosgitbase-db: conexão com PostgreSQL, migrações e acesso a dadosgitbase-git: leitura de repositórios Git comgixgitbase-loader: pipeline de ingestão/indexaçãogitbase-uast: parsing semântico (Go/Rust) via tree-sittergitbase-pgwire: servidor compatível com protocolo PostgreSQL
Comandos da CLI¶
Comandos disponíveis em gitbase-cli:
serve: sobe servidor pgwiresync: sincroniza metadados Githealth: checa conectividade e migraçõeshydrate-blobs: hidrata conteúdo textual dos blobssearch-index: monta/atualiza índice de busca textualuast: gera cache/projeções de UAST
Fluxo de dados¶
Repositórios Git
↓ (gitbase-git)
Metadados (repos/refs/commits/tree/files)
↓ (gitbase-loader + gitbase-db)
PostgreSQL (schema gitbase)
↓
Blobs hidratados + índice de busca + UAST
↓
Consultas SQL / pgwire
Detalhes de implementação relevantes¶
1) Descoberta e leitura Git (gitbase-git)¶
- Usa
gixpara abrir repositórios e caminhar histórico - Suporta roots com
.git/e repositórios bare - Gera snapshots de commit contendo:
- metadados do commit
- entradas de árvore
- arquivos por commit
- Classifica blobs binários por NUL byte e validação UTF-8
2) Sincronização (gitbase-loader::sync_repositories)¶
- Faz upsert em:
repositoriesrefscommitscommit_parentstree_entriesfiles- Evita retrabalho para commits já persistidos
3) Hidratação de blobs (hydrate_blobs / hydrate_missing_blobs)¶
- Busca blobs faltantes no banco
- Lê blob no Git de origem
- Regras:
- blob maior que
max_blob_bytes→ marca sem conteúdo - blob binário → marca sem conteúdo
- blob textual válido → persiste
content
4) Indexação de busca (index_search)¶
- Candidatos vêm de
files+blobs - Só indexa conteúdo textual UTF-8
- Normaliza NUL (
\0) para espaço - Persiste
tsvectoremcode_index
5) Indexação UAST (index_uast)¶
- Suporta linguagens detectadas por extensão:
.go.rs- Armazena documento UAST em JSONB (
uast_cache) - Projeta funções e imports em tabelas específicas
6) Consulta via pgwire (gitbase-pgwire)¶
- Server escuta em
bind(default0.0.0.0:5433) - Autenticação simples por usuário/senha configuráveis
- Encaminha queries para PostgreSQL real (
sqlx) - Em consultas
SELECT, tenta hidratar blobs referenciados porblob_hashantes de executar
Variáveis de ambiente mais usadas¶
DATABASE_URLGITBASE_REPO_ROOTSGITBASE_DB_MAX_CONNECTIONSGITBASE_BLOB_MAX_BYTESGITBASE_BLOB_HYDRATE_LIMITGITBASE_SEARCH_LIMITGITBASE_UAST_LIMITGITBASE_BIND_ADDRGITBASE_PG_USERGITBASE_PG_PASSWORD