Metadata-Version: 2.4
Name: s-gitkit
Version: 0.1.1
Summary: Git-хостинг абстракция: GitHub/GitLab read-layer (provider pattern для любых репозиториев + фабрика)
Author: Dmitry
License: MIT
License-File: LICENSE
Requires-Python: >=3.11
Requires-Dist: httpx>=0.27
Requires-Dist: stamina>=24.3
Provides-Extra: dev
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
Requires-Dist: pytest>=8; extra == 'dev'
Requires-Dist: respx>=0.21; extra == 'dev'
Description-Content-Type: text/markdown

# gitkit

**Git-хостинг абстракция: GitHub/GitLab read-layer.**

Единая интерфейс для работы с произвольными git-репозиториями на GitHub, GitLab и self-hosted GitLab инстансах. Provider pattern позволяет добавить новых провайдеров.

## Возможности

- **GitProvider Protocol** — read-only операции (list_tags, resolve_tag, fetch_file, fetch_tree, clone_url)
- **GitHubProvider** — поддержка github.com и GitHub Enterprise
- **GitLabProvider** — поддержка gitlab.com и self-hosted GitLab
- **GitProviderFactory** — автоматический выбор провайдера по URL
- **Парсинг URL** — поддержка https и scp-like git URL-ов
- **Retry-политика** — автоматический retry с exponential backoff (3 попытки)

## Установка

```bash
uv add s-gitkit
```

Имя пакета для импорта — `gitkit`.

## Быстрый старт

```python
import gitkit

# Автоматический выбор провайдера по URL
factory = gitkit.GitProviderFactory()
provider, repo = factory.create(
    "https://github.com/owner/repo.git",
    token="ghp_xxx"  # опционально
)

# Работа с репозиторием
tags = await provider.list_tags(repo=repo)
sha = await provider.resolve_tag(repo=repo, tag="v1.0.0")
content = await provider.fetch_file(repo=repo, ref="main", path="README.md")
tree = await provider.fetch_tree(repo=repo, ref="main")

# Clone URL
clone = provider.clone_url(repo=repo)
```

## Self-hosted GitLab

Для поддержки self-hosted GitLab инстансов передайте хосты при создании фабрики:

```python
factory = gitkit.GitProviderFactory(
    self_hosted_hosts=["git.example.com", "gitlab.company.org"]
)
provider, repo = factory.create(
    "https://git.example.com/group/project.git",
    token="glpat_xxx"
)
```

## GitHub Enterprise

Для GitHub Enterprise используйте `github_base_url`:

```python
factory = gitkit.GitProviderFactory(
    github_base_url="https://github.enterprise.com/api/v3"
)
```

## Разработка

```bash
uv sync --extra dev
uv run pytest -q
uv run ruff check gitkit
```

## Лицензия

MIT © 2026 Dmitry.
