redgit 1.2.2__tar.gz → 1.3.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.
- {redgit-1.2.2/redgit.egg-info → redgit-1.3.0}/PKG-INFO +22 -2
- {redgit-1.2.2 → redgit-1.3.0}/README.md +17 -1
- {redgit-1.2.2 → redgit-1.3.0}/pyproject.toml +28 -2
- redgit-1.3.0/redgit/__init__.py +1 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/cli.py +32 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/propose.py +1139 -342
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/push.py +111 -146
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/config.py +61 -2
- redgit-1.3.0/redgit/core/constants.py +235 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/gitops.py +81 -60
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/llm.py +93 -1
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/prompt.py +83 -4
- redgit-1.3.0/redgit/prompts/commit/task_filtered.md +122 -0
- redgit-1.3.0/redgit/utils/formatting.py +362 -0
- redgit-1.3.0/redgit/utils/logging.py +277 -0
- redgit-1.3.0/redgit/utils/notifications.py +264 -0
- {redgit-1.2.2 → redgit-1.3.0/redgit.egg-info}/PKG-INFO +22 -2
- {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/SOURCES.txt +5 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/requires.txt +5 -0
- redgit-1.2.2/redgit/__init__.py +0 -1
- {redgit-1.2.2 → redgit-1.3.0}/LICENSE +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/__init__.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/ci.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/config.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/daily.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/init.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/integration.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/notify.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/plugin.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/quality.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/scout.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/tap.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/daily_state.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/llm_providers.json +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/scout/__init__.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/scout/team.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/semgrep.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/core/tap.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/integrations/__init__.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/integrations/base.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/integrations/registry.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/plugins/__init__.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/plugins/base.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/plugins/registry.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/__init__.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/commit/default.md +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/commit/minimal.md +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/daily/default.md +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/quality/default.md +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/splash.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/utils/__init__.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/utils/console.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/utils/editor.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit/utils/security.py +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/dependency_links.txt +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/entry_points.txt +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/top_level.txt +0 -0
- {redgit-1.2.2 → redgit-1.3.0}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redgit
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0
|
|
4
4
|
Summary: AI-powered Git workflow assistant with task management integration
|
|
5
5
|
Author-email: Your Name <your.email@example.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -31,10 +31,14 @@ Requires-Dist: PyYAML>=6.0
|
|
|
31
31
|
Requires-Dist: GitPython>=3.1.0
|
|
32
32
|
Requires-Dist: requests>=2.31.0
|
|
33
33
|
Requires-Dist: ruff>=0.4.0
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: pytest>=8.0.0; extra == "dev"
|
|
36
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == "dev"
|
|
37
|
+
Requires-Dist: pytest-mock>=3.12.0; extra == "dev"
|
|
34
38
|
Dynamic: license-file
|
|
35
39
|
|
|
36
40
|
<p align="center">
|
|
37
|
-
<img src="https://raw.githubusercontent.com/ertiz82/redgit/main/assets/logo.svg?v=1.
|
|
41
|
+
<img src="https://raw.githubusercontent.com/ertiz82/redgit/main/assets/logo.svg?v=1.3.0" alt="RedGit Logo" width="400"/>
|
|
38
42
|
</p>
|
|
39
43
|
|
|
40
44
|
<p align="center">
|
|
@@ -45,6 +49,8 @@ Dynamic: license-file
|
|
|
45
49
|
<a href="https://pypi.org/project/redgit/"><img src="https://img.shields.io/pypi/v/redgit.svg" alt="PyPI version"></a>
|
|
46
50
|
<a href="https://pypi.org/project/redgit/"><img src="https://img.shields.io/pypi/dm/redgit.svg" alt="Downloads"></a>
|
|
47
51
|
<a href="https://pypi.org/project/redgit/"><img src="https://img.shields.io/pypi/pyversions/redgit.svg" alt="Python versions"></a>
|
|
52
|
+
<a href="https://github.com/ertiz82/redgit/actions/workflows/test.yml"><img src="https://github.com/ertiz82/redgit/actions/workflows/test.yml/badge.svg" alt="Tests"></a>
|
|
53
|
+
<a href="https://codecov.io/gh/ertiz82/redgit"><img src="https://codecov.io/gh/ertiz82/redgit/branch/main/graph/badge.svg" alt="Coverage"></a>
|
|
48
54
|
<a href="https://github.com/ertiz82/redgit/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License"></a>
|
|
49
55
|
<a href="https://github.com/ertiz82/redgit/stargazers"><img src="https://img.shields.io/github/stars/ertiz82/redgit.svg" alt="GitHub stars"></a>
|
|
50
56
|
</p>
|
|
@@ -95,6 +101,7 @@ rg push # Push and update Jira/Linear
|
|
|
95
101
|
| **AI-Powered Grouping** | Automatically groups related file changes into logical commits |
|
|
96
102
|
| **Task Management** | Integrates with Jira, Linear, Asana, Trello, and more |
|
|
97
103
|
| **Smart Branching** | Creates branches based on issue keys (`feature/PROJ-123-description`) |
|
|
104
|
+
| **Task-Filtered Mode** | Auto-create subtasks under parent task, detect task from branch name |
|
|
98
105
|
| **Auto Transitions** | Moves issues through workflow statuses (To Do → In Progress → Done) |
|
|
99
106
|
| **PR Creation** | Automatically creates pull requests with proper descriptions |
|
|
100
107
|
| **Code Quality** | Built-in quality checks with ruff/flake8 + AI analysis |
|
|
@@ -174,6 +181,19 @@ rg propose
|
|
|
174
181
|
rg push --pr # Creates pull requests automatically
|
|
175
182
|
```
|
|
176
183
|
|
|
184
|
+
### Task-Filtered Mode (Subtasks)
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Create subtasks under a parent task
|
|
188
|
+
rg propose -t PROJ-123
|
|
189
|
+
|
|
190
|
+
# Auto-detect task from branch name
|
|
191
|
+
git checkout feature/PROJ-123-some-work
|
|
192
|
+
rg propose # Detects PROJ-123 automatically
|
|
193
|
+
|
|
194
|
+
# AI analyzes files, creates relevant subtasks, always returns to original branch
|
|
195
|
+
```
|
|
196
|
+
|
|
177
197
|
---
|
|
178
198
|
|
|
179
199
|
## Integrations
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<p align="center">
|
|
2
|
-
<img src="https://raw.githubusercontent.com/ertiz82/redgit/main/assets/logo.svg?v=1.
|
|
2
|
+
<img src="https://raw.githubusercontent.com/ertiz82/redgit/main/assets/logo.svg?v=1.3.0" alt="RedGit Logo" width="400"/>
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
5
|
<p align="center">
|
|
@@ -10,6 +10,8 @@
|
|
|
10
10
|
<a href="https://pypi.org/project/redgit/"><img src="https://img.shields.io/pypi/v/redgit.svg" alt="PyPI version"></a>
|
|
11
11
|
<a href="https://pypi.org/project/redgit/"><img src="https://img.shields.io/pypi/dm/redgit.svg" alt="Downloads"></a>
|
|
12
12
|
<a href="https://pypi.org/project/redgit/"><img src="https://img.shields.io/pypi/pyversions/redgit.svg" alt="Python versions"></a>
|
|
13
|
+
<a href="https://github.com/ertiz82/redgit/actions/workflows/test.yml"><img src="https://github.com/ertiz82/redgit/actions/workflows/test.yml/badge.svg" alt="Tests"></a>
|
|
14
|
+
<a href="https://codecov.io/gh/ertiz82/redgit"><img src="https://codecov.io/gh/ertiz82/redgit/branch/main/graph/badge.svg" alt="Coverage"></a>
|
|
13
15
|
<a href="https://github.com/ertiz82/redgit/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License"></a>
|
|
14
16
|
<a href="https://github.com/ertiz82/redgit/stargazers"><img src="https://img.shields.io/github/stars/ertiz82/redgit.svg" alt="GitHub stars"></a>
|
|
15
17
|
</p>
|
|
@@ -60,6 +62,7 @@ rg push # Push and update Jira/Linear
|
|
|
60
62
|
| **AI-Powered Grouping** | Automatically groups related file changes into logical commits |
|
|
61
63
|
| **Task Management** | Integrates with Jira, Linear, Asana, Trello, and more |
|
|
62
64
|
| **Smart Branching** | Creates branches based on issue keys (`feature/PROJ-123-description`) |
|
|
65
|
+
| **Task-Filtered Mode** | Auto-create subtasks under parent task, detect task from branch name |
|
|
63
66
|
| **Auto Transitions** | Moves issues through workflow statuses (To Do → In Progress → Done) |
|
|
64
67
|
| **PR Creation** | Automatically creates pull requests with proper descriptions |
|
|
65
68
|
| **Code Quality** | Built-in quality checks with ruff/flake8 + AI analysis |
|
|
@@ -139,6 +142,19 @@ rg propose
|
|
|
139
142
|
rg push --pr # Creates pull requests automatically
|
|
140
143
|
```
|
|
141
144
|
|
|
145
|
+
### Task-Filtered Mode (Subtasks)
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
# Create subtasks under a parent task
|
|
149
|
+
rg propose -t PROJ-123
|
|
150
|
+
|
|
151
|
+
# Auto-detect task from branch name
|
|
152
|
+
git checkout feature/PROJ-123-some-work
|
|
153
|
+
rg propose # Detects PROJ-123 automatically
|
|
154
|
+
|
|
155
|
+
# AI analyzes files, creates relevant subtasks, always returns to original branch
|
|
156
|
+
```
|
|
157
|
+
|
|
142
158
|
---
|
|
143
159
|
|
|
144
160
|
## Integrations
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "redgit"
|
|
7
|
-
version = "1.
|
|
7
|
+
version = "1.3.0"
|
|
8
8
|
description = "AI-powered Git workflow assistant with task management integration"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -37,6 +37,13 @@ dependencies = [
|
|
|
37
37
|
"ruff>=0.4.0"
|
|
38
38
|
]
|
|
39
39
|
|
|
40
|
+
[project.optional-dependencies]
|
|
41
|
+
dev = [
|
|
42
|
+
"pytest>=8.0.0",
|
|
43
|
+
"pytest-cov>=4.1.0",
|
|
44
|
+
"pytest-mock>=3.12.0",
|
|
45
|
+
]
|
|
46
|
+
|
|
40
47
|
[project.urls]
|
|
41
48
|
Homepage = "https://github.com/ertiz82/redgit"
|
|
42
49
|
Documentation = "https://github.com/ertiz82/redgit#readme"
|
|
@@ -56,4 +63,23 @@ redgit = [
|
|
|
56
63
|
"core/*.json",
|
|
57
64
|
"integrations/*.json",
|
|
58
65
|
"prompts/**/*.md"
|
|
59
|
-
]
|
|
66
|
+
]
|
|
67
|
+
|
|
68
|
+
[tool.pytest.ini_options]
|
|
69
|
+
testpaths = ["tests"]
|
|
70
|
+
python_files = ["test_*.py"]
|
|
71
|
+
python_functions = ["test_*"]
|
|
72
|
+
addopts = "-v --tb=short"
|
|
73
|
+
filterwarnings = ["ignore::DeprecationWarning"]
|
|
74
|
+
|
|
75
|
+
[tool.coverage.run]
|
|
76
|
+
source = ["redgit"]
|
|
77
|
+
omit = ["tests/*", "redgit/splash.py"]
|
|
78
|
+
|
|
79
|
+
[tool.coverage.report]
|
|
80
|
+
exclude_lines = [
|
|
81
|
+
"pragma: no cover",
|
|
82
|
+
"if __name__ == .__main__.:",
|
|
83
|
+
"raise NotImplementedError",
|
|
84
|
+
]
|
|
85
|
+
show_missing = true
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.3.0"
|
|
@@ -5,6 +5,7 @@ from rich import print as rprint
|
|
|
5
5
|
|
|
6
6
|
from redgit import __version__
|
|
7
7
|
from redgit.splash import splash
|
|
8
|
+
from redgit.utils.logging import setup_logging, get_logger
|
|
8
9
|
from redgit.commands.init import init_cmd
|
|
9
10
|
from redgit.commands.propose import propose_cmd
|
|
10
11
|
from redgit.commands.push import push_cmd
|
|
@@ -107,7 +108,38 @@ def _load_integration_commands():
|
|
|
107
108
|
pass
|
|
108
109
|
|
|
109
110
|
|
|
111
|
+
def _setup_logging():
|
|
112
|
+
"""Set up logging based on config."""
|
|
113
|
+
try:
|
|
114
|
+
from redgit.core.config import ConfigManager
|
|
115
|
+
|
|
116
|
+
config_manager = ConfigManager()
|
|
117
|
+
logging_config = config_manager.get_logging_config()
|
|
118
|
+
|
|
119
|
+
# Check if logging is enabled
|
|
120
|
+
if not logging_config.get("enabled", True):
|
|
121
|
+
return
|
|
122
|
+
|
|
123
|
+
# Determine log level
|
|
124
|
+
level_str = logging_config.get("level", "INFO").upper()
|
|
125
|
+
log_to_file = logging_config.get("file", True)
|
|
126
|
+
|
|
127
|
+
# Check for verbose flag in args
|
|
128
|
+
verbose = "-v" in sys.argv or "--verbose" in sys.argv
|
|
129
|
+
|
|
130
|
+
setup_logging(
|
|
131
|
+
verbose=verbose,
|
|
132
|
+
log_to_file=log_to_file
|
|
133
|
+
)
|
|
134
|
+
except Exception:
|
|
135
|
+
# Silently continue if logging setup fails
|
|
136
|
+
pass
|
|
137
|
+
|
|
138
|
+
|
|
110
139
|
def main():
|
|
140
|
+
# Set up logging
|
|
141
|
+
_setup_logging()
|
|
142
|
+
|
|
111
143
|
# Load plugin and integration commands dynamically
|
|
112
144
|
_load_plugin_commands()
|
|
113
145
|
_load_integration_commands()
|