gitgraph

package
v0.24.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 15, 2026 License: MIT Imports: 9 Imported by: 0

Documentation

Overview

Package gitgraph — коннектор git-истории → граф 2dph (L-9.4 #233). Читает локальные репозитории git.produktor.io (eSlider/*, produktor/*) через internal/gitlog (go-git, без git-бинара) — тот же источник, что premises-корпус Leaf (source=git, kind=commit) — и мапит в brain.CommitInput: Commit-узел (id = repo:sha) + Person по email + ребро AUTHORED. Слой чистый (cgo-free): запись в Ladybug исполняет bin/git/graph.go через brain.UpsertCommits.

Канон git-коммита: (repo, sha) — полный sha уникален в репозитории, один и тот же sha в разных репо (форк/копия истории) — разные узлы. repo — имя origin-remote (gitlog.RepoName), стабильное при переезде клона. Авторство — по Author (как gitlog/git-корпус); merge-коммиты gitlog.Log пропускает (тот же канон, что premises-слой Leaf).

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CommitID

func CommitID(repo, sha string) string

CommitID — канон узла Commit: repo:sha (полный sha), формат как FileID (repo:path). Стабилен при переезде клона; одинаковый sha в разных репо — разные узлы.

func ToInputs

func ToInputs(rcs []RepoCommit) []brain.CommitInput

ToInputs мапит RepoCommit → brain.CommitInput: id = repo:sha, email lowercase (Person.id = email канон, как mail D-1 #257), dedup по (repo,sha) — повторный прогон не плодит дублей, сортировка по дате ASC (родители раньше; детерминизм отчёта/записи), tie-break по id.

func WeakSubject

func WeakSubject(subject string) bool

WeakSubject — неинформативный subject коммита: пустой/пробельный или целиком служебное слово (Update/WIP/fix…). Содержательный subject («feat: mesh node», «fix: typo») слабым не считается.

Types

type Fact

type Fact struct {
	Repo      string    `json:"repo"`
	Person    string    `json:"person"` // name <email>
	Claim     string    `json:"claim"`
	Period    string    `json:"period"`
	Commits   int       `json:"commits"`
	Weak      int       `json:"weak"`
	Premises  []string  `json:"premises"`
	Inference string    `json:"inference"`
	Gaps      []string  `json:"gaps"`
	Verdict   string    `json:"verdict"`
	Rows      []FactRow `json:"rows,omitempty"` // --commits
}

Fact — audit card по Vinogradov (claim/premises/inference/gaps/verdict).

func BuildFacts

func BuildFacts(groups []FactGroup, showCommits bool) []Fact

BuildFacts превращает группы в факты-карточки. Premises — первые 5 commit id группы (+счётчик остатка); verdict accept, либо weaken когда ВСЕ subject-ы слабые (только «трогал файлы»), partial weak → gap OPEN.

type FactFilter

type FactFilter struct {
	Repo   string    // пусто = все
	Author string    // email, пусто = все
	Since  time.Time // только коммиты с датой >=
}

FactFilter — фильтры git-facts CLI.

type FactGroup

type FactGroup struct {
	Repo  string
	Email string
	Name  string
	Rows  []FactRow
}

FactGroup — факт: person работал над repo; Rows отсортированы по дате ASC.

func GroupFacts

func GroupFacts(rows []FactRow, f FactFilter) []FactGroup

GroupFacts фильтрует строки (repo/author/since) и группирует по (repo, email): person работал над repo. Детерминизм: группа сортирует коммиты по дате ASC (tie-break id), группы — по (repo, email).

type FactRow

type FactRow struct {
	ID      string // repo:sha
	Repo    string
	Subject string
	Date    string // RFC3339
	Email   string // Person.id = email lowercase
	Name    string
}

FactRow — одна строка выборки Commit-AUTHORED-Person из графа.

type Repo

type Repo struct {
	Path string
	Name string
}

Repo — один источник git-фактов: путь клона и стабильное имя из origin-remote (fallback — имя каталога).

func Resolve

func Resolve(root string, repos []string) ([]Repo, error)

Resolve собирает репозитории: явные пути (repos) или одноуровневый скан root за каталогами с .git (алгоритм corpus.Git.resolveRepos). Root без детей-репозиториев сам считается репозиторием. Репо, чьё имя не резолвится (битый .git), пропускается.

type RepoCommit

type RepoCommit struct {
	Repo   Repo
	Commit gitlog.Commit
}

RepoCommit — один коммит истории с репозиторием (контекст канона).

func ReadAll

func ReadAll(ctx context.Context, repos []Repo, opt gitlog.Options) ([]RepoCommit, error)

ReadAll читает историю репозиториев через gitlog.Log (skip merges — тот же канон, что git-корпус Leaf) и возвращает коммиты в порядке истории (HEAD → старые). Репо без читаемой истории пропускаются молча (как corpus.Git.Stream).

type RepoCount

type RepoCount struct {
	Repo string
	N    int
}

RepoCount — строка раскладки dry-run по репозиторию.

type Stats

type Stats struct {
	Total  int
	Repos  []RepoCount
	Emails int
	Weak   int
}

Stats — числа dry-run импорта: раскладка по repo, уникальные автор-email (приближение Person-узлов до записи), коммиты со слабым subject.

func ComputeStats

func ComputeStats(inputs []brain.CommitInput) Stats

ComputeStats считает числа dry-run до записи.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL