git-auto-pro 1.1.1__tar.gz → 2.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- git_auto_pro-2.5.0/.editorconfig +46 -0
- git_auto_pro-2.5.0/.gitattributes +34 -0
- git_auto_pro-2.5.0/.gitignore +149 -0
- git_auto_pro-2.5.0/.pre-commit-config.yaml +74 -0
- git_auto_pro-2.5.0/CHANGELOG.md +132 -0
- git_auto_pro-2.5.0/CONTRIBUTING.md +444 -0
- git_auto_pro-2.5.0/Makefile +117 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/PKG-INFO +83 -4
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/README.md +82 -3
- git_auto_pro-2.5.0/SETUP_GUIDE.md +528 -0
- git_auto_pro-2.5.0/docs/api.md +229 -0
- git_auto_pro-2.5.0/docs/examples.md +280 -0
- git_auto_pro-2.5.0/docs/troubleshooting.md +245 -0
- git_auto_pro-2.5.0/docs/usage.md +256 -0
- git_auto_pro-2.5.0/examples/advanced_usage.py +159 -0
- git_auto_pro-2.5.0/examples/basic_usage.py +46 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/__init__.py +1 -1
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/backup.py +14 -9
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/cli.py +144 -4
- git_auto_pro-2.5.0/git_auto_pro/commands/__init__.py +1 -0
- git_auto_pro-2.5.0/git_auto_pro/commands/doctor.py +135 -0
- git_auto_pro-2.5.0/git_auto_pro/commands/release.py +259 -0
- git_auto_pro-2.5.0/git_auto_pro/commands/safe_flow.py +145 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/config.py +4 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/git_commands.py +103 -2
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/github.py +182 -58
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/github_issues.py +108 -117
- git_auto_pro-2.5.0/git_auto_pro/github_pr/__init__.py +1 -0
- git_auto_pro-2.5.0/git_auto_pro/github_pr/pr_manager.py +278 -0
- git_auto_pro-2.5.0/git_auto_pro/scaffolding/hooks.py +138 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/project.py +17 -5
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/PKG-INFO +83 -4
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/SOURCES.txt +35 -1
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/pyproject.toml +2 -2
- git_auto_pro-2.5.0/requirements-dev.txt +23 -0
- git_auto_pro-2.5.0/requirements.txt +7 -0
- git_auto_pro-2.5.0/scripts/build.sh +33 -0
- git_auto_pro-2.5.0/scripts/install.sh +26 -0
- git_auto_pro-2.5.0/scripts/test.sh +16 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/setup.py +2 -2
- git_auto_pro-2.5.0/tests/__init__.py +1 -0
- git_auto_pro-2.5.0/tests/conftest.py +53 -0
- git_auto_pro-2.5.0/tests/test_backup.py +38 -0
- git_auto_pro-2.5.0/tests/test_doctor.py +77 -0
- git_auto_pro-2.5.0/tests/test_github_remote.py +53 -0
- git_auto_pro-2.5.0/tests/test_hooks.py +67 -0
- git_auto_pro-2.5.0/tests/test_release.py +132 -0
- git_auto_pro-2.5.0/tests/test_safe_flow.py +93 -0
- git_auto_pro-2.5.0/tests/test_undo.py +0 -0
- git_auto_pro-1.1.1/git_auto_pro/scaffolding/hooks.py +0 -331
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/LICENSE +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/gitignore_manager.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/__init__.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/github_templates.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/gitignore.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/license.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/readme.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/templates.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro/scaffolding/workflows.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/dependency_links.txt +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/entry_points.txt +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/requires.txt +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/git_auto_pro.egg-info/top_level.txt +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/setup.cfg +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_cli.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_config.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_git_commands.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_github.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_github_issues.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_gitignore_manager.py +0 -0
- {git_auto_pro-1.1.1 → git_auto_pro-2.5.0}/tests/test_scaffolding.py +0 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# EditorConfig is awesome: https://EditorConfig.org
|
|
2
|
+
|
|
3
|
+
# top-most EditorConfig file
|
|
4
|
+
root = true
|
|
5
|
+
|
|
6
|
+
# Unix-style newlines with a newline ending every file
|
|
7
|
+
[*]
|
|
8
|
+
end_of_line = lf
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
charset = utf-8
|
|
11
|
+
trim_trailing_whitespace = true
|
|
12
|
+
|
|
13
|
+
# Python files
|
|
14
|
+
[*.py]
|
|
15
|
+
indent_style = space
|
|
16
|
+
indent_size = 4
|
|
17
|
+
max_line_length = 100
|
|
18
|
+
|
|
19
|
+
# YAML files
|
|
20
|
+
[*.{yml,yaml}]
|
|
21
|
+
indent_style = space
|
|
22
|
+
indent_size = 2
|
|
23
|
+
|
|
24
|
+
# JSON files
|
|
25
|
+
[*.json]
|
|
26
|
+
indent_style = space
|
|
27
|
+
indent_size = 2
|
|
28
|
+
|
|
29
|
+
# Markdown files
|
|
30
|
+
[*.md]
|
|
31
|
+
trim_trailing_whitespace = false
|
|
32
|
+
max_line_length = off
|
|
33
|
+
|
|
34
|
+
# Shell scripts
|
|
35
|
+
[*.sh]
|
|
36
|
+
indent_style = space
|
|
37
|
+
indent_size = 2
|
|
38
|
+
|
|
39
|
+
# Makefile
|
|
40
|
+
[Makefile]
|
|
41
|
+
indent_style = tab
|
|
42
|
+
|
|
43
|
+
# Package files
|
|
44
|
+
[{package.json,*.lock}]
|
|
45
|
+
indent_style = space
|
|
46
|
+
indent_size = 2
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Auto detect text files and perform LF normalization
|
|
2
|
+
* text=auto
|
|
3
|
+
|
|
4
|
+
# Python files
|
|
5
|
+
*.py text eol=lf
|
|
6
|
+
|
|
7
|
+
# Shell scripts
|
|
8
|
+
*.sh text eol=lf
|
|
9
|
+
|
|
10
|
+
# Windows scripts
|
|
11
|
+
*.bat text eol=crlf
|
|
12
|
+
*.cmd text eol=crlf
|
|
13
|
+
|
|
14
|
+
# Markdown
|
|
15
|
+
*.md text eol=lf
|
|
16
|
+
|
|
17
|
+
# YAML
|
|
18
|
+
*.yml text eol=lf
|
|
19
|
+
*.yaml text eol=lf
|
|
20
|
+
|
|
21
|
+
# JSON
|
|
22
|
+
*.json text eol=lf
|
|
23
|
+
|
|
24
|
+
# Documentation
|
|
25
|
+
*.txt text eol=lf
|
|
26
|
+
LICENSE text eol=lf
|
|
27
|
+
README text eol=lf
|
|
28
|
+
|
|
29
|
+
# Archives
|
|
30
|
+
*.zip binary
|
|
31
|
+
*.tar binary
|
|
32
|
+
*.gz binary
|
|
33
|
+
*.tgz binary
|
|
34
|
+
*.7z binary
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
# Byte-compiled / optimized / DLL files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
|
|
6
|
+
# C extensions
|
|
7
|
+
*.so
|
|
8
|
+
|
|
9
|
+
# Distribution / packaging
|
|
10
|
+
.Python
|
|
11
|
+
build/
|
|
12
|
+
develop-eggs/
|
|
13
|
+
dist/
|
|
14
|
+
downloads/
|
|
15
|
+
eggs/
|
|
16
|
+
.eggs/
|
|
17
|
+
lib/
|
|
18
|
+
lib64/
|
|
19
|
+
parts/
|
|
20
|
+
sdist/
|
|
21
|
+
var/
|
|
22
|
+
wheels/
|
|
23
|
+
share/python-wheels/
|
|
24
|
+
*.egg-info/
|
|
25
|
+
.installed.cfg
|
|
26
|
+
*.egg
|
|
27
|
+
MANIFEST
|
|
28
|
+
|
|
29
|
+
# PyInstaller
|
|
30
|
+
*.manifest
|
|
31
|
+
*.spec
|
|
32
|
+
|
|
33
|
+
# Installer logs
|
|
34
|
+
pip-log.txt
|
|
35
|
+
pip-delete-this-directory.txt
|
|
36
|
+
|
|
37
|
+
# Unit test / coverage reports
|
|
38
|
+
htmlcov/
|
|
39
|
+
.tox/
|
|
40
|
+
.nox/
|
|
41
|
+
.coverage
|
|
42
|
+
.coverage.*
|
|
43
|
+
.cache
|
|
44
|
+
nosetests.xml
|
|
45
|
+
coverage.xml
|
|
46
|
+
*.cover
|
|
47
|
+
*.py,cover
|
|
48
|
+
.hypothesis/
|
|
49
|
+
.pytest_cache/
|
|
50
|
+
cover/
|
|
51
|
+
|
|
52
|
+
# Translations
|
|
53
|
+
*.mo
|
|
54
|
+
*.pot
|
|
55
|
+
|
|
56
|
+
# Django stuff:
|
|
57
|
+
*.log
|
|
58
|
+
local_settings.py
|
|
59
|
+
db.sqlite3
|
|
60
|
+
db.sqlite3-journal
|
|
61
|
+
|
|
62
|
+
# Flask stuff:
|
|
63
|
+
instance/
|
|
64
|
+
.webassets-cache
|
|
65
|
+
|
|
66
|
+
# Scrapy stuff:
|
|
67
|
+
.scrapy
|
|
68
|
+
|
|
69
|
+
# Sphinx documentation
|
|
70
|
+
docs/_build/
|
|
71
|
+
|
|
72
|
+
# PyBuilder
|
|
73
|
+
.pybuilder/
|
|
74
|
+
target/
|
|
75
|
+
|
|
76
|
+
# Jupyter Notebook
|
|
77
|
+
.ipynb_checkpoints
|
|
78
|
+
|
|
79
|
+
# IPython
|
|
80
|
+
profile_default/
|
|
81
|
+
ipython_config.py
|
|
82
|
+
|
|
83
|
+
# pyenv
|
|
84
|
+
.python-version
|
|
85
|
+
|
|
86
|
+
# pipenv
|
|
87
|
+
Pipfile.lock
|
|
88
|
+
|
|
89
|
+
# poetry
|
|
90
|
+
poetry.lock
|
|
91
|
+
|
|
92
|
+
# pdm
|
|
93
|
+
.pdm.toml
|
|
94
|
+
|
|
95
|
+
# PEP 582
|
|
96
|
+
__pypackages__/
|
|
97
|
+
|
|
98
|
+
# Celery stuff
|
|
99
|
+
celerybeat-schedule
|
|
100
|
+
celerybeat.pid
|
|
101
|
+
|
|
102
|
+
# SageMath parsed files
|
|
103
|
+
*.sage.py
|
|
104
|
+
|
|
105
|
+
# Environments
|
|
106
|
+
.env
|
|
107
|
+
.venv
|
|
108
|
+
env/
|
|
109
|
+
venv/
|
|
110
|
+
ENV/
|
|
111
|
+
env.bak/
|
|
112
|
+
venv.bak/
|
|
113
|
+
|
|
114
|
+
# Spyder project settings
|
|
115
|
+
.spyderproject
|
|
116
|
+
.spyproject
|
|
117
|
+
|
|
118
|
+
# Rope project settings
|
|
119
|
+
.ropeproject
|
|
120
|
+
|
|
121
|
+
# mkdocs documentation
|
|
122
|
+
/site
|
|
123
|
+
|
|
124
|
+
# mypy
|
|
125
|
+
.mypy_cache/
|
|
126
|
+
.dmypy.json
|
|
127
|
+
dmypy.json
|
|
128
|
+
|
|
129
|
+
# Pyre type checker
|
|
130
|
+
.pyre/
|
|
131
|
+
|
|
132
|
+
# pytype static type analyzer
|
|
133
|
+
.pytype/
|
|
134
|
+
|
|
135
|
+
# Cython debug symbols
|
|
136
|
+
cython_debug/
|
|
137
|
+
|
|
138
|
+
# IDEs
|
|
139
|
+
.vscode/
|
|
140
|
+
.idea/
|
|
141
|
+
*.swp
|
|
142
|
+
*.swo
|
|
143
|
+
*~
|
|
144
|
+
.DS_Store
|
|
145
|
+
|
|
146
|
+
# Project specific
|
|
147
|
+
*.log
|
|
148
|
+
.git-auto-config.json
|
|
149
|
+
"""
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Pre-commit hooks configuration
|
|
2
|
+
# Install: pip install pre-commit
|
|
3
|
+
# Setup: pre-commit install
|
|
4
|
+
# Run manually: pre-commit run --all-files
|
|
5
|
+
|
|
6
|
+
repos:
|
|
7
|
+
# General hooks
|
|
8
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
9
|
+
rev: v4.5.0
|
|
10
|
+
hooks:
|
|
11
|
+
- id: trailing-whitespace
|
|
12
|
+
- id: end-of-file-fixer
|
|
13
|
+
- id: check-yaml
|
|
14
|
+
- id: check-json
|
|
15
|
+
- id: check-added-large-files
|
|
16
|
+
args: ['--maxkb=1000']
|
|
17
|
+
- id: check-merge-conflict
|
|
18
|
+
- id: check-case-conflict
|
|
19
|
+
- id: check-docstring-first
|
|
20
|
+
- id: debug-statements
|
|
21
|
+
- id: mixed-line-ending
|
|
22
|
+
args: ['--fix=lf']
|
|
23
|
+
|
|
24
|
+
# Python code formatting
|
|
25
|
+
- repo: https://github.com/psf/black
|
|
26
|
+
rev: 23.11.0
|
|
27
|
+
hooks:
|
|
28
|
+
- id: black
|
|
29
|
+
language_version: python3
|
|
30
|
+
args: ['--line-length=100']
|
|
31
|
+
|
|
32
|
+
# Python linting
|
|
33
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
34
|
+
rev: v0.1.6
|
|
35
|
+
hooks:
|
|
36
|
+
- id: ruff
|
|
37
|
+
args: ['--fix', '--exit-non-zero-on-fix']
|
|
38
|
+
|
|
39
|
+
# Python import sorting
|
|
40
|
+
- repo: https://github.com/PyCQA/isort
|
|
41
|
+
rev: 5.12.0
|
|
42
|
+
hooks:
|
|
43
|
+
- id: isort
|
|
44
|
+
args: ['--profile', 'black', '--line-length', '100']
|
|
45
|
+
|
|
46
|
+
# Type checking
|
|
47
|
+
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
48
|
+
rev: v1.7.0
|
|
49
|
+
hooks:
|
|
50
|
+
- id: mypy
|
|
51
|
+
additional_dependencies: [types-all]
|
|
52
|
+
args: ['--ignore-missing-imports', '--no-strict-optional']
|
|
53
|
+
|
|
54
|
+
# Security checks
|
|
55
|
+
- repo: https://github.com/PyCQA/bandit
|
|
56
|
+
rev: 1.7.5
|
|
57
|
+
hooks:
|
|
58
|
+
- id: bandit
|
|
59
|
+
args: ['-c', 'pyproject.toml']
|
|
60
|
+
additional_dependencies: ['bandit[toml]']
|
|
61
|
+
|
|
62
|
+
# Markdown linting
|
|
63
|
+
- repo: https://github.com/igorshubovych/markdownlint-cli
|
|
64
|
+
rev: v0.37.0
|
|
65
|
+
hooks:
|
|
66
|
+
- id: markdownlint
|
|
67
|
+
args: ['--fix']
|
|
68
|
+
|
|
69
|
+
# YAML linting
|
|
70
|
+
- repo: https://github.com/adrienverge/yamllint
|
|
71
|
+
rev: v1.33.0
|
|
72
|
+
hooks:
|
|
73
|
+
- id: yamllint
|
|
74
|
+
args: ['-d', '{extends: default, rules: {line-length: disable}}']
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [2.5.0] - 2026-07-26
|
|
9
|
+
|
|
10
|
+
### 🔴 Critical Fixes
|
|
11
|
+
- **Repository owner now detected from the remote URL** — `issue`, `pr`, `prs`, `merge-pr`, `review-pr`, `collab`, and `protect` previously assumed the repository belonged to the authenticated user (`repos/<you>/<repo>`), so they 404'd on organization, fork, or collaborator repos. The owner is now parsed from the `origin` remote (HTTPS, scp-style SSH `git@github.com:owner/repo`, `ssh://`, and `git://` forms). `--repo owner/name` is supported on all of these commands; a bare `--repo name` keeps the legacy behavior (paired with your login).
|
|
12
|
+
- **`git-auto new` respects `default_branch`** — project creation no longer hardcodes `main`; it reads the configured default branch and aligns the local branch (`git branch -M`) before pushing, so it no longer fails when git's initial branch is `master`.
|
|
13
|
+
- **Backups now preserve history** — `backup` archives the entire `.git` directory (including `objects/`). Previously only `.git/{config,HEAD,refs,hooks}` were archived, leaving refs pointing at missing objects, so a restored repo had no history. `restore` now uses the `filter="data"` extraction guard on Python 3.12+.
|
|
14
|
+
- **Generated git hooks are POSIX-`sh` safe** — `pre-commit`/`pre-push` hooks used the bash-only `&>` redirect, which `/bin/sh` (dash on Ubuntu/Debian) parses as `&` (background) + `> /dev/null`. This made the `command -v <tool>` guard always pass, so the hook ran the (missing) tool and failed, blocking commits on systems without ruff/black/pytest installed. Replaced with the POSIX `> /dev/null 2>&1` form.
|
|
15
|
+
- **PR reviewers/labels report the real outcome** — `pr` no longer prints `✓ Reviewers requested` / `✓ Labels added` when the API rejected the request (e.g. 422). The sub-requests now call `raise_for_status()` and report the actual HTTP status on failure.
|
|
16
|
+
- **`close_issue` / `update_issue` network handling** — both now catch `ConnectionError`/`Timeout` (previously only `HTTPError` was caught, so a transient network error crashed with a raw traceback). All requests have `timeout=10`. The closing comment is now best-effort — a network error on the comment no longer aborts the actual close.
|
|
17
|
+
- **Accurate `merge-pr` diagnostics** — 405 now reports "not mergeable (pending/failed checks, missing reviews, draft, or branch protection)" and 409 reports "merge conflicts or head branch changed". The previous messages were swapped.
|
|
18
|
+
|
|
19
|
+
### 🛠️ Changed
|
|
20
|
+
- **Modernized GitHub auth** — switched from the legacy `Authorization: token <PAT>` scheme and `application/vnd.github.v3+json` media type to `Authorization: Bearer <PAT>`, `application/vnd.github+json`, and the `X-GitHub-Api-Version: 2022-11-28` header. Removed the deprecated `mercy-preview` (topics) and `luke-cage-preview` (branch protection) preview media types.
|
|
21
|
+
- **Removed dead code** — deleted an accidental ~190-line duplicate of the `github_templates` module that had been pasted into `scaffolding/hooks.py` (it was never imported; `cli.py` uses the real `github_templates.py`). `hooks.py` shrank from 331 to 138 lines.
|
|
22
|
+
- **Reduced redundant API calls** — GitHub operations no longer make a separate `GET /user` round-trip solely to build repo URLs when the owner is detected from the remote.
|
|
23
|
+
|
|
24
|
+
### 🧪 Testing
|
|
25
|
+
- 89 tests total (up from 70)
|
|
26
|
+
- 3 new test files: `test_github_remote.py` (remote URL parsing + owner resolution), `test_hooks.py` (POSIX-`sh` portability incl. live `dash` execution), `test_backup.py` (backup/restore round-trip proving history survives)
|
|
27
|
+
- Zero regressions on the existing suite
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## [2.0.0] - 2026-03-10
|
|
32
|
+
|
|
33
|
+
### 🔴 Critical Fixes
|
|
34
|
+
- **Default Branch Config Bug** — `push` and `init` now read `default_branch` from `~/.git-auto-config.json` instead of hardcoding `main`/`master`
|
|
35
|
+
- **Empty Commit Guard** — Prevents empty commits with Rich warning; handles `BadName` exception for brand new repos with no HEAD
|
|
36
|
+
- **Push Conflict Detection** — Detects rejected pushes due to diverged history, suggests `git-auto pull --rebase`
|
|
37
|
+
- **Offline / API Graceful Handling** — All GitHub API calls wrapped with `ConnectionError`/`Timeout` handling; no raw tracebacks
|
|
38
|
+
|
|
39
|
+
### 🟡 New Features
|
|
40
|
+
- **Safe Commit Flow** (`--safe` flag on `push`/`commit`)
|
|
41
|
+
- Commits to `test/<branch>` automatically
|
|
42
|
+
- Handles branch name collisions via `test/<branch>-{timestamp}` fallback
|
|
43
|
+
- Auto-creates Pull Request with diff summary and review checklist
|
|
44
|
+
- Configurable via `safe_mode`, `test_branch_prefix`, `auto_create_pr` settings
|
|
45
|
+
- **`git-auto undo`** — Undo last commit (soft/hard/force-push)
|
|
46
|
+
- `--hard` with confirmation prompt
|
|
47
|
+
- `--push` for soft reset + force push
|
|
48
|
+
- `--yes` flag bypasses confirmation (CI-safe)
|
|
49
|
+
- **`git-auto release`** — Full release management
|
|
50
|
+
- Reads version from `pyproject.toml` (canonical source)
|
|
51
|
+
- Bumps patch/minor/major, syncs `__init__.py` + `setup.py`
|
|
52
|
+
- Auto-generates changelog from conventional commits
|
|
53
|
+
- Creates Git tag + GitHub release (with `--draft` option)
|
|
54
|
+
|
|
55
|
+
### 🟢 New Features
|
|
56
|
+
- **`git-auto doctor`** — System diagnostics
|
|
57
|
+
- Checks: Git version, Python version, token validity, remote config, branch consistency, untracked files, safe mode
|
|
58
|
+
- **`git-auto pr`** — Standalone PR management
|
|
59
|
+
- `git-auto pr "title"` — Create PR from current branch
|
|
60
|
+
- `git-auto prs` — List pull requests
|
|
61
|
+
- `git-auto merge-pr 42` — Merge PR (with `--squash`/`--rebase`)
|
|
62
|
+
- `git-auto review-pr 42` — Open PR in browser
|
|
63
|
+
|
|
64
|
+
### New Modules
|
|
65
|
+
| Module | Purpose |
|
|
66
|
+
|--------|---------|
|
|
67
|
+
| `commands/safe_flow.py` | Safe commit flow |
|
|
68
|
+
| `commands/release.py` | Release management |
|
|
69
|
+
| `commands/doctor.py` | System diagnostics |
|
|
70
|
+
| `github_pr/pr_manager.py` | PR CRUD via GitHub API |
|
|
71
|
+
|
|
72
|
+
### New Config Options
|
|
73
|
+
- `safe_mode` — Enable safe commit flow by default (default: `false`)
|
|
74
|
+
- `test_branch_prefix` — Prefix for safe branches (default: `test`)
|
|
75
|
+
- `auto_create_pr` — Auto-create PR on safe push (default: `true`)
|
|
76
|
+
- `pr_base_branch` — Base branch for PRs (default: `main`)
|
|
77
|
+
|
|
78
|
+
### Testing
|
|
79
|
+
- 83 tests total (up from 42)
|
|
80
|
+
- 5 new test files: `test_undo.py`, `test_pr_manager.py`, `test_doctor.py`, `test_release.py`, `test_safe_flow.py`
|
|
81
|
+
- Zero regressions on existing test suite
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## [1.1.0] - 2026-01-04
|
|
86
|
+
|
|
87
|
+
### Added
|
|
88
|
+
- **Interactive .gitignore Manager** 🎉
|
|
89
|
+
- `git-auto ignore-manager` command
|
|
90
|
+
- Browse all project files with ignore status
|
|
91
|
+
- Select files to ignore with checkbox interface
|
|
92
|
+
- Add patterns by type (folder, extension, file, custom)
|
|
93
|
+
- Common presets (Python, Node.js, IDEs, Build artifacts, Logs)
|
|
94
|
+
- Remove patterns from .gitignore
|
|
95
|
+
- Clean already-tracked files from git
|
|
96
|
+
- Preview changes before saving
|
|
97
|
+
- Show current .gitignore patterns
|
|
98
|
+
|
|
99
|
+
### Enhanced
|
|
100
|
+
- Better file management workflow
|
|
101
|
+
- More user-friendly .gitignore creation
|
|
102
|
+
- Visual feedback for ignore status
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## [1.0.0] - 2026-01-03
|
|
107
|
+
|
|
108
|
+
### Added
|
|
109
|
+
- GitHub authentication with secure keyring storage
|
|
110
|
+
- Repository creation and management
|
|
111
|
+
- Complete Git command automation
|
|
112
|
+
- Project scaffolding with multiple templates
|
|
113
|
+
- Interactive README, LICENSE, and .gitignore generators
|
|
114
|
+
- CI/CD workflow generation (GitHub Actions, GitLab CI)
|
|
115
|
+
- Git hooks management (pre-commit, pre-push, commit-msg)
|
|
116
|
+
- GitHub issue and PR template generation
|
|
117
|
+
- Collaboration features (add collaborators, branch protection)
|
|
118
|
+
- Repository backup and restore functionality
|
|
119
|
+
- Configuration system with persistent storage
|
|
120
|
+
- Repository statistics and analytics
|
|
121
|
+
- Support for Python 3.8+
|
|
122
|
+
- 30+ CLI commands
|
|
123
|
+
- Beautiful terminal output with Rich library
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## [0.1.0] - Development
|
|
128
|
+
|
|
129
|
+
### Added
|
|
130
|
+
- Initial project structure
|
|
131
|
+
- Basic CLI framework
|
|
132
|
+
- Core functionality implementation
|