treeroot

package
v0.2.0 Latest Latest
Warning

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

Go to latest
Published: Sep 13, 2026 License: AGPL-3.0 Imports: 7 Imported by: 0

Documentation

Overview

Package treeroot отвечает на ОДИН вопрос: какое дерево судит этот каталог — и его ли это дерево.

───────────────────────────────────────────────────────────────────────────── ПРЕДМЕТ

Корень дерева выводили арифметикой пути: `"../../../.."` от каталога пакета. Такое выражение есть координата РАСКЛАДКИ монорепо, а не свойство модуля, и вне монорепо оно резолвится МОЛЧА — давая каталог, в который распаковали клон. Наблюдалось прямо: обход ушёл в исходники тулчейна Go, лежащие в домашнем каталоге оператора (kacho#2254), а гейт соглашения о вкладе читал ведомость по вычисленному пути (kacho#2239).

Существенно не то, что проверка при этом падала. Существенно, что дерево, где по вычисленному пути лежит нечто годное, дало бы ЗЕЛЁНЫЙ — вердикт о ЧУЖОМ дереве, неотличимый от настоящего.

───────────────────────────────────────────────────────────────────────────── ДВА УТВЕРЖДЕНИЯ, И ВТОРОЕ НЕСУЩЕЕ

  1. корень назван ИНДЕКСОМ (`rev-parse --show-toplevel`), а не числом уровней;
  2. найденное дерево ОТСЛЕЖИВАЕТ каталог, из которого спрашивают.

Без второго модуль, распакованный внутрь постороннего репозитория, получил бы корень того репозитория — и первое утверждение выполнялось бы при этом безупречно. Именно поэтому проверок две, а не одна.

───────────────────────────────────────────────────────────────────────────── ИСХОДОВ ДВА, ТРЕТЬЕГО НЕТ

Предпосылка выполнена — корень назван; не выполнена — отказ, НАЗЫВАЮЩИЙ её словами. Молчаливое вычисление чужого пути исходом не является: «не знаю» не выдаётся ни за «нет находок», ни за «находка».

Index

Constants

This section is empty.

Variables

View Source
var ErrModuleRootUnknown = errors.New("корень модуля не установлен")

ErrModuleRootUnknown — корень модуля не установлен подъёмом за маркером.

View Source
var ErrTreeNotResolved = errors.New("дерево под резолвом не установлено")

ErrTreeNotResolved — дерево назвать нечем: проверка НЕ ИСПОЛНЯЛАСЬ.

Отдельный признак, а не общий отказ: «дерева нет» и «в дереве находка» — разные исходы, и первый не вычитается из вердикта и не зачитывается в успех.

Functions

func ModuleRootFrom

func ModuleRootFrom(start string) (string, error)

ModuleRootFrom поднимается от start до БЛИЖАЙШЕГО каталога с `go.mod`.

Маркер, а не число уровней и не имя каталога: имя у арендатора выбирает тот, кто клонировал, а число уровней верно ровно для одной посадки.

func Of

func Of(start string) (string, error)

Of — корень дерева, которому принадлежит start.

Types

type Placement

type Placement struct {
	// RepoRoot — корень дерева, спрошенный у индекса; предпосылка проверена.
	RepoRoot string
	// ModuleRoot — корень модуля, найденный маркером go.mod.
	ModuleRoot string
	// ModuleDir — путь модуля ОТНОСИТЕЛЬНО RepoRoot.
	ModuleDir string
}

Placement — посадка модуля: дерево, которое его судит, и его путь в этом дереве.

ModuleDir выводится, а не выписывается, и потому верен в ОБЕИХ посадках: `services/iam` внутри монорепо, `.` в самостоятельном клоне. Выписанная координата верна ровно в одной и молча неверна в другой.

func Locate

func Locate(start string) (Placement, error)

Locate — посадка модуля, найденного от start.

Jump to

Keyboard shortcuts

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