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.
Files changed (58) hide show
  1. {redgit-1.2.2/redgit.egg-info → redgit-1.3.0}/PKG-INFO +22 -2
  2. {redgit-1.2.2 → redgit-1.3.0}/README.md +17 -1
  3. {redgit-1.2.2 → redgit-1.3.0}/pyproject.toml +28 -2
  4. redgit-1.3.0/redgit/__init__.py +1 -0
  5. {redgit-1.2.2 → redgit-1.3.0}/redgit/cli.py +32 -0
  6. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/propose.py +1139 -342
  7. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/push.py +111 -146
  8. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/config.py +61 -2
  9. redgit-1.3.0/redgit/core/constants.py +235 -0
  10. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/gitops.py +81 -60
  11. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/llm.py +93 -1
  12. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/prompt.py +83 -4
  13. redgit-1.3.0/redgit/prompts/commit/task_filtered.md +122 -0
  14. redgit-1.3.0/redgit/utils/formatting.py +362 -0
  15. redgit-1.3.0/redgit/utils/logging.py +277 -0
  16. redgit-1.3.0/redgit/utils/notifications.py +264 -0
  17. {redgit-1.2.2 → redgit-1.3.0/redgit.egg-info}/PKG-INFO +22 -2
  18. {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/SOURCES.txt +5 -0
  19. {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/requires.txt +5 -0
  20. redgit-1.2.2/redgit/__init__.py +0 -1
  21. {redgit-1.2.2 → redgit-1.3.0}/LICENSE +0 -0
  22. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/__init__.py +0 -0
  23. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/ci.py +0 -0
  24. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/config.py +0 -0
  25. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/daily.py +0 -0
  26. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/init.py +0 -0
  27. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/integration.py +0 -0
  28. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/notify.py +0 -0
  29. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/plugin.py +0 -0
  30. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/quality.py +0 -0
  31. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/scout.py +0 -0
  32. {redgit-1.2.2 → redgit-1.3.0}/redgit/commands/tap.py +0 -0
  33. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/daily_state.py +0 -0
  34. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/llm_providers.json +0 -0
  35. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/scout/__init__.py +0 -0
  36. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/scout/team.py +0 -0
  37. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/semgrep.py +0 -0
  38. {redgit-1.2.2 → redgit-1.3.0}/redgit/core/tap.py +0 -0
  39. {redgit-1.2.2 → redgit-1.3.0}/redgit/integrations/__init__.py +0 -0
  40. {redgit-1.2.2 → redgit-1.3.0}/redgit/integrations/base.py +0 -0
  41. {redgit-1.2.2 → redgit-1.3.0}/redgit/integrations/registry.py +0 -0
  42. {redgit-1.2.2 → redgit-1.3.0}/redgit/plugins/__init__.py +0 -0
  43. {redgit-1.2.2 → redgit-1.3.0}/redgit/plugins/base.py +0 -0
  44. {redgit-1.2.2 → redgit-1.3.0}/redgit/plugins/registry.py +0 -0
  45. {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/__init__.py +0 -0
  46. {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/commit/default.md +0 -0
  47. {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/commit/minimal.md +0 -0
  48. {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/daily/default.md +0 -0
  49. {redgit-1.2.2 → redgit-1.3.0}/redgit/prompts/quality/default.md +0 -0
  50. {redgit-1.2.2 → redgit-1.3.0}/redgit/splash.py +0 -0
  51. {redgit-1.2.2 → redgit-1.3.0}/redgit/utils/__init__.py +0 -0
  52. {redgit-1.2.2 → redgit-1.3.0}/redgit/utils/console.py +0 -0
  53. {redgit-1.2.2 → redgit-1.3.0}/redgit/utils/editor.py +0 -0
  54. {redgit-1.2.2 → redgit-1.3.0}/redgit/utils/security.py +0 -0
  55. {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/dependency_links.txt +0 -0
  56. {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/entry_points.txt +0 -0
  57. {redgit-1.2.2 → redgit-1.3.0}/redgit.egg-info/top_level.txt +0 -0
  58. {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.2.2
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.2.2" alt="RedGit Logo" width="400"/>
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.2" alt="RedGit Logo" width="400"/>
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.2.2"
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()