git-copilot-commit 0.1.6__tar.gz → 0.1.8__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_copilot_commit-0.1.8/PKG-INFO +183 -0
- git_copilot_commit-0.1.8/README.md +170 -0
- git_copilot_commit-0.1.8/pyproject.toml +108 -0
- git_copilot_commit-0.1.8/src/git_copilot_commit/__init__.py +3 -0
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/src/git_copilot_commit/cli.py +19 -4
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/src/git_copilot_commit/settings.py +13 -11
- git_copilot_commit-0.1.8/src/git_copilot_commit/version.py +40 -0
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/uv.lock +67 -75
- git_copilot_commit-0.1.6/PKG-INFO +0 -201
- git_copilot_commit-0.1.6/README.md +0 -188
- git_copilot_commit-0.1.6/pyproject.toml +0 -22
- git_copilot_commit-0.1.6/src/git_copilot_commit/__init__.py +0 -0
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/.github/workflows/ci.yml +0 -0
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/.gitignore +0 -0
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/.python-version +0 -0
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/LICENSE +0 -0
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/src/git_copilot_commit/git.py +0 -0
- {git_copilot_commit-0.1.6 → git_copilot_commit-0.1.8}/src/git_copilot_commit/py.typed +0 -0
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: git-copilot-commit
|
|
3
|
+
Version: 0.1.8
|
|
4
|
+
Summary: Automatically generate and commit changes using copilot
|
|
5
|
+
Author-email: Dheepak Krishnamurthy <1813121+kdheepak@users.noreply.github.com>
|
|
6
|
+
License-File: LICENSE
|
|
7
|
+
Requires-Python: >=3.12
|
|
8
|
+
Requires-Dist: platformdirs>=4.0.0
|
|
9
|
+
Requires-Dist: pycopilot>=0.1.6
|
|
10
|
+
Requires-Dist: rich>=14.0.0
|
|
11
|
+
Requires-Dist: typer>=0.16.0
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
|
|
14
|
+
# `git-copilot-commit`
|
|
15
|
+
|
|
16
|
+
AI-powered Git commit assistant that generates conventional commit messages using GitHub Copilot.
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
- Generates commit messages based on your staged changes
|
|
21
|
+
- Supports multiple AI models: GPT-4, Claude, Gemini, and more
|
|
22
|
+
- Allows editing of generated messages before committing
|
|
23
|
+
- Follows the [Conventional Commits](https://www.conventionalcommits.org/) standard
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
|
|
27
|
+
Install with [`uv`] (recommended):
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
uv tool install git-copilot-commit
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Or with `pipx`:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pipx install git-copilot-commit
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Or run directly with [`uv`]:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
uvx git-copilot-commit --help
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
[`uv`]: https://github.com/astral-sh/uv
|
|
46
|
+
|
|
47
|
+
## Prerequisites
|
|
48
|
+
|
|
49
|
+
- Active GitHub Copilot subscription
|
|
50
|
+
|
|
51
|
+
## Quick Start
|
|
52
|
+
|
|
53
|
+
1. Authenticate with GitHub Copilot:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
git-copilot-commit authenticate
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
2. Make changes in your repository.
|
|
60
|
+
|
|
61
|
+
3. Generate and commit:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
git-copilot-commit commit
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Usage
|
|
68
|
+
|
|
69
|
+
### Commit changes
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
git-copilot-commit commit
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Options:**
|
|
76
|
+
|
|
77
|
+
- `--all, -a`: Stage all files
|
|
78
|
+
- `--verbose, -v`: Show detailed output
|
|
79
|
+
- `--model, -m`: Choose an AI model
|
|
80
|
+
|
|
81
|
+
Workflow:
|
|
82
|
+
|
|
83
|
+
1. Analyze changes
|
|
84
|
+
2. Prompt to stage files
|
|
85
|
+
3. Generate a commit message
|
|
86
|
+
4. Choose to commit, edit, or cancel
|
|
87
|
+
|
|
88
|
+
### Authenticate
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
git-copilot-commit authenticate
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### List models
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
git-copilot-commit models
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Configure
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
git-copilot-commit config --show
|
|
104
|
+
git-copilot-commit config --set-default-model gpt-4o
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Examples
|
|
108
|
+
|
|
109
|
+
Commit all changes:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
git-copilot-commit commit --all
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Verbose output:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
git-copilot-commit commit --verbose
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Use a specific model:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
git-copilot-commit commit --model claude-3.5-sonnet
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Set and use a default model:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
git-copilot-commit config --set-default-model gpt-4o
|
|
131
|
+
git-copilot-commit commit
|
|
132
|
+
git-copilot-commit commit --model claude-3.5-sonnet
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Commit Message Format
|
|
136
|
+
|
|
137
|
+
Follows [Conventional Commits](https://www.conventionalcommits.org/):
|
|
138
|
+
|
|
139
|
+
```
|
|
140
|
+
<type>[optional scope]: <description>
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
**Types:**
|
|
144
|
+
|
|
145
|
+
- `feat`: New feature
|
|
146
|
+
- `fix`: Bug fix
|
|
147
|
+
- `docs`: Documentation
|
|
148
|
+
- `style`: Formatting only
|
|
149
|
+
- `refactor`: Code restructure
|
|
150
|
+
- `perf`: Performance
|
|
151
|
+
- `test`: Tests
|
|
152
|
+
- `chore`: Maintenance
|
|
153
|
+
- `revert`: Revert changes
|
|
154
|
+
|
|
155
|
+
**Examples:**
|
|
156
|
+
|
|
157
|
+
- `feat(auth): add JWT authentication`
|
|
158
|
+
- `fix(db): retry connection on failure`
|
|
159
|
+
- `docs(readme): update install steps`
|
|
160
|
+
- `refactor(utils): simplify date parsing`
|
|
161
|
+
|
|
162
|
+
## Git Configuration
|
|
163
|
+
|
|
164
|
+
Add a git alias by adding the following to your `~/.gitconfig`:
|
|
165
|
+
|
|
166
|
+
```ini
|
|
167
|
+
[alias]
|
|
168
|
+
ai-commit = "!f() { git-copilot-commit commit $@; }; f"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Now you can run:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
git ai-commit
|
|
175
|
+
git ai-commit --model claude-3.5-sonnet
|
|
176
|
+
git ai-commit --all --verbose
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
Show more context in diffs:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
git config --global diff.context 3
|
|
183
|
+
```
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# `git-copilot-commit`
|
|
2
|
+
|
|
3
|
+
AI-powered Git commit assistant that generates conventional commit messages using GitHub Copilot.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Generates commit messages based on your staged changes
|
|
8
|
+
- Supports multiple AI models: GPT-4, Claude, Gemini, and more
|
|
9
|
+
- Allows editing of generated messages before committing
|
|
10
|
+
- Follows the [Conventional Commits](https://www.conventionalcommits.org/) standard
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
Install with [`uv`] (recommended):
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
uv tool install git-copilot-commit
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Or with `pipx`:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
pipx install git-copilot-commit
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or run directly with [`uv`]:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
uvx git-copilot-commit --help
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
[`uv`]: https://github.com/astral-sh/uv
|
|
33
|
+
|
|
34
|
+
## Prerequisites
|
|
35
|
+
|
|
36
|
+
- Active GitHub Copilot subscription
|
|
37
|
+
|
|
38
|
+
## Quick Start
|
|
39
|
+
|
|
40
|
+
1. Authenticate with GitHub Copilot:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
git-copilot-commit authenticate
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
2. Make changes in your repository.
|
|
47
|
+
|
|
48
|
+
3. Generate and commit:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git-copilot-commit commit
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Usage
|
|
55
|
+
|
|
56
|
+
### Commit changes
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git-copilot-commit commit
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Options:**
|
|
63
|
+
|
|
64
|
+
- `--all, -a`: Stage all files
|
|
65
|
+
- `--verbose, -v`: Show detailed output
|
|
66
|
+
- `--model, -m`: Choose an AI model
|
|
67
|
+
|
|
68
|
+
Workflow:
|
|
69
|
+
|
|
70
|
+
1. Analyze changes
|
|
71
|
+
2. Prompt to stage files
|
|
72
|
+
3. Generate a commit message
|
|
73
|
+
4. Choose to commit, edit, or cancel
|
|
74
|
+
|
|
75
|
+
### Authenticate
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
git-copilot-commit authenticate
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### List models
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
git-copilot-commit models
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Configure
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
git-copilot-commit config --show
|
|
91
|
+
git-copilot-commit config --set-default-model gpt-4o
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Examples
|
|
95
|
+
|
|
96
|
+
Commit all changes:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
git-copilot-commit commit --all
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Verbose output:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
git-copilot-commit commit --verbose
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Use a specific model:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
git-copilot-commit commit --model claude-3.5-sonnet
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
Set and use a default model:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
git-copilot-commit config --set-default-model gpt-4o
|
|
118
|
+
git-copilot-commit commit
|
|
119
|
+
git-copilot-commit commit --model claude-3.5-sonnet
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Commit Message Format
|
|
123
|
+
|
|
124
|
+
Follows [Conventional Commits](https://www.conventionalcommits.org/):
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
<type>[optional scope]: <description>
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Types:**
|
|
131
|
+
|
|
132
|
+
- `feat`: New feature
|
|
133
|
+
- `fix`: Bug fix
|
|
134
|
+
- `docs`: Documentation
|
|
135
|
+
- `style`: Formatting only
|
|
136
|
+
- `refactor`: Code restructure
|
|
137
|
+
- `perf`: Performance
|
|
138
|
+
- `test`: Tests
|
|
139
|
+
- `chore`: Maintenance
|
|
140
|
+
- `revert`: Revert changes
|
|
141
|
+
|
|
142
|
+
**Examples:**
|
|
143
|
+
|
|
144
|
+
- `feat(auth): add JWT authentication`
|
|
145
|
+
- `fix(db): retry connection on failure`
|
|
146
|
+
- `docs(readme): update install steps`
|
|
147
|
+
- `refactor(utils): simplify date parsing`
|
|
148
|
+
|
|
149
|
+
## Git Configuration
|
|
150
|
+
|
|
151
|
+
Add a git alias by adding the following to your `~/.gitconfig`:
|
|
152
|
+
|
|
153
|
+
```ini
|
|
154
|
+
[alias]
|
|
155
|
+
ai-commit = "!f() { git-copilot-commit commit $@; }; f"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Now you can run:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
git ai-commit
|
|
162
|
+
git ai-commit --model claude-3.5-sonnet
|
|
163
|
+
git ai-commit --all --verbose
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Show more context in diffs:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
git config --global diff.context 3
|
|
170
|
+
```
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "git-copilot-commit"
|
|
3
|
+
version = "0.1.8"
|
|
4
|
+
description = "Automatically generate and commit changes using copilot"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
authors = [
|
|
7
|
+
{ name = "Dheepak Krishnamurthy", email = "1813121+kdheepak@users.noreply.github.com" },
|
|
8
|
+
]
|
|
9
|
+
requires-python = ">=3.12"
|
|
10
|
+
dependencies = [
|
|
11
|
+
"pycopilot>=0.1.6",
|
|
12
|
+
"rich>=14.0.0",
|
|
13
|
+
"typer>=0.16.0",
|
|
14
|
+
"platformdirs>=4.0.0",
|
|
15
|
+
]
|
|
16
|
+
|
|
17
|
+
[project.scripts]
|
|
18
|
+
git-copilot-commit = "git_copilot_commit.cli:app"
|
|
19
|
+
|
|
20
|
+
[build-system]
|
|
21
|
+
requires = ["hatchling"]
|
|
22
|
+
build-backend = "hatchling.build"
|
|
23
|
+
|
|
24
|
+
[tool.semantic_release]
|
|
25
|
+
assets = []
|
|
26
|
+
build_command_env = []
|
|
27
|
+
commit_message = "{version}\n\nAutomatically generated by python-semantic-release"
|
|
28
|
+
commit_parser = "conventional"
|
|
29
|
+
logging_use_named_masks = false
|
|
30
|
+
major_on_zero = true
|
|
31
|
+
allow_zero_version = false
|
|
32
|
+
repo_dir = "."
|
|
33
|
+
no_git_verify = false
|
|
34
|
+
tag_format = "v{version}"
|
|
35
|
+
version_toml = ["pyproject.toml:project.version"]
|
|
36
|
+
|
|
37
|
+
[tool.semantic_release.branches.main]
|
|
38
|
+
match = "(main|master)"
|
|
39
|
+
prerelease_token = "rc"
|
|
40
|
+
prerelease = false
|
|
41
|
+
|
|
42
|
+
[tool.semantic_release.changelog]
|
|
43
|
+
changelog_file = ""
|
|
44
|
+
exclude_commit_patterns = []
|
|
45
|
+
mode = "update"
|
|
46
|
+
insertion_flag = "<!-- version list -->"
|
|
47
|
+
template_dir = "templates"
|
|
48
|
+
|
|
49
|
+
[tool.semantic_release.changelog.default_templates]
|
|
50
|
+
changelog_file = "CHANGELOG.md"
|
|
51
|
+
output_format = "md"
|
|
52
|
+
mask_initial_release = true
|
|
53
|
+
|
|
54
|
+
[tool.semantic_release.changelog.environment]
|
|
55
|
+
block_start_string = "{%"
|
|
56
|
+
block_end_string = "%}"
|
|
57
|
+
variable_start_string = "{{"
|
|
58
|
+
variable_end_string = "}}"
|
|
59
|
+
comment_start_string = "{#"
|
|
60
|
+
comment_end_string = "#}"
|
|
61
|
+
trim_blocks = false
|
|
62
|
+
lstrip_blocks = false
|
|
63
|
+
newline_sequence = "\n"
|
|
64
|
+
keep_trailing_newline = false
|
|
65
|
+
extensions = []
|
|
66
|
+
autoescape = false
|
|
67
|
+
|
|
68
|
+
[tool.semantic_release.commit_author]
|
|
69
|
+
env = "GIT_COMMIT_AUTHOR"
|
|
70
|
+
default = "semantic-release <semantic-release>"
|
|
71
|
+
|
|
72
|
+
[tool.semantic_release.commit_parser_options]
|
|
73
|
+
minor_tags = ["feat"]
|
|
74
|
+
patch_tags = ["fix", "perf"]
|
|
75
|
+
other_allowed_tags = [
|
|
76
|
+
"build",
|
|
77
|
+
"chore",
|
|
78
|
+
"ci",
|
|
79
|
+
"docs",
|
|
80
|
+
"style",
|
|
81
|
+
"refactor",
|
|
82
|
+
"test",
|
|
83
|
+
]
|
|
84
|
+
allowed_tags = [
|
|
85
|
+
"feat",
|
|
86
|
+
"fix",
|
|
87
|
+
"perf",
|
|
88
|
+
"build",
|
|
89
|
+
"chore",
|
|
90
|
+
"ci",
|
|
91
|
+
"docs",
|
|
92
|
+
"style",
|
|
93
|
+
"refactor",
|
|
94
|
+
"test",
|
|
95
|
+
]
|
|
96
|
+
default_bump_level = 0
|
|
97
|
+
parse_squash_commits = true
|
|
98
|
+
ignore_merge_commits = true
|
|
99
|
+
|
|
100
|
+
[tool.semantic_release.remote]
|
|
101
|
+
name = "origin"
|
|
102
|
+
type = "github"
|
|
103
|
+
ignore_token_for_push = false
|
|
104
|
+
insecure = false
|
|
105
|
+
|
|
106
|
+
[tool.semantic_release.publish]
|
|
107
|
+
dist_glob_patterns = ["dist/*"]
|
|
108
|
+
upload_to_vcs_release = true
|
|
@@ -7,18 +7,31 @@ from rich.console import Console
|
|
|
7
7
|
from rich.prompt import Confirm
|
|
8
8
|
from rich.panel import Panel
|
|
9
9
|
from rich.table import Table
|
|
10
|
+
import rich
|
|
10
11
|
|
|
11
12
|
from pycopilot.copilot import Copilot
|
|
12
13
|
from pycopilot.auth import Authentication
|
|
13
14
|
from .git import GitRepository, GitError, NotAGitRepositoryError, GitStatus
|
|
14
15
|
from .settings import Settings
|
|
16
|
+
from .version import __version__
|
|
15
17
|
|
|
16
18
|
console = Console()
|
|
17
19
|
app = typer.Typer(help=__doc__, add_completion=False)
|
|
18
20
|
|
|
19
21
|
|
|
22
|
+
def version_callback(value: bool):
|
|
23
|
+
if value:
|
|
24
|
+
rich.print(f"git-copilot-version [bold green]{__version__}[/]")
|
|
25
|
+
raise typer.Exit()
|
|
26
|
+
|
|
27
|
+
|
|
20
28
|
@app.callback(invoke_without_command=True)
|
|
21
|
-
def main(
|
|
29
|
+
def main(
|
|
30
|
+
ctx: typer.Context,
|
|
31
|
+
version: bool = typer.Option(
|
|
32
|
+
False, "--version", callback=version_callback, help="Show version and exit"
|
|
33
|
+
),
|
|
34
|
+
):
|
|
22
35
|
"""
|
|
23
36
|
Automatically commit changes in the current git repository.
|
|
24
37
|
"""
|
|
@@ -226,13 +239,15 @@ def commit(
|
|
|
226
239
|
|
|
227
240
|
if status.has_unstaged_changes:
|
|
228
241
|
if Confirm.ask(
|
|
229
|
-
"Modified files found. Add [bold yellow]all unstaged changes[/] to staging?"
|
|
242
|
+
"Modified files found. Add [bold yellow]all unstaged changes[/] to staging?",
|
|
243
|
+
default=True,
|
|
230
244
|
):
|
|
231
245
|
repo.stage_modified()
|
|
232
246
|
console.print("[green]Staged modified files.[/green]")
|
|
233
247
|
if status.has_untracked_files:
|
|
234
248
|
if Confirm.ask(
|
|
235
|
-
"Untracked files found. Add [bold yellow]all untracked files and unstaged changes[/] to staging?"
|
|
249
|
+
"Untracked files found. Add [bold yellow]all untracked files and unstaged changes[/] to staging?",
|
|
250
|
+
default=True,
|
|
236
251
|
):
|
|
237
252
|
repo.stage_files()
|
|
238
253
|
console.print("[green]Staged untracked files.[/green]")
|
|
@@ -295,7 +310,7 @@ def commit(
|
|
|
295
310
|
@app.command()
|
|
296
311
|
def authenticate():
|
|
297
312
|
"""Autheticate with GitHub Copilot."""
|
|
298
|
-
Authentication().
|
|
313
|
+
Authentication().auth()
|
|
299
314
|
|
|
300
315
|
|
|
301
316
|
@app.command()
|
|
@@ -1,28 +1,30 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Settings management using
|
|
2
|
+
Settings management using platformdirs for cross-platform directory paths.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import json
|
|
6
6
|
from typing import Any
|
|
7
7
|
|
|
8
|
-
from
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
8
|
+
from platformdirs import (
|
|
9
|
+
user_cache_dir,
|
|
10
|
+
user_config_dir,
|
|
11
|
+
user_data_dir,
|
|
12
|
+
user_state_dir,
|
|
13
13
|
)
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class Settings:
|
|
17
|
-
"""Manages application settings using
|
|
17
|
+
"""Manages application settings using platformdirs for cross-platform directory paths."""
|
|
18
18
|
|
|
19
19
|
APP_NAME = "git-copilot-commit"
|
|
20
20
|
|
|
21
21
|
def __init__(self):
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
self.
|
|
25
|
-
self.
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
|
|
24
|
+
self.config_dir = Path(user_config_dir(f"com.kdheepak.{self.APP_NAME}"))
|
|
25
|
+
self.data_dir = Path(user_data_dir(f"com.kdheepak.{self.APP_NAME}"))
|
|
26
|
+
self.cache_dir = Path(user_cache_dir(f"com.kdheepak.{self.APP_NAME}"))
|
|
27
|
+
self.state_dir = Path(user_state_dir(f"com.kdheepak.{self.APP_NAME}"))
|
|
26
28
|
|
|
27
29
|
self.config_file = self.config_dir / "config.json"
|
|
28
30
|
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import subprocess
|
|
2
|
+
import shlex
|
|
3
|
+
from importlib import metadata
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
DIR = os.path.dirname(os.path.realpath(__file__))
|
|
8
|
+
|
|
9
|
+
VERSION = metadata.version(__package__ or "git-copilot-commit")
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def cmd(cmd, kind="") -> str:
|
|
13
|
+
"""
|
|
14
|
+
Get git subprocess output
|
|
15
|
+
"""
|
|
16
|
+
output = "unknown"
|
|
17
|
+
try:
|
|
18
|
+
output = (
|
|
19
|
+
subprocess.check_output(shlex.split(cmd), cwd=DIR, stderr=subprocess.STDOUT)
|
|
20
|
+
.decode()
|
|
21
|
+
.strip()
|
|
22
|
+
)
|
|
23
|
+
except Exception as _:
|
|
24
|
+
...
|
|
25
|
+
return f"{kind}{output}"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def last_commit_id() -> str:
|
|
29
|
+
return cmd("git describe --always --dirty --abbrev=7")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def branch() -> str:
|
|
33
|
+
return cmd("git rev-parse --abbrev-ref HEAD")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def get_git_version() -> str:
|
|
37
|
+
return f"{last_commit_id()}-{branch()}"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
__version__ = f"v{VERSION}-{get_git_version()}"
|
|
@@ -12,47 +12,26 @@ wheels = [
|
|
|
12
12
|
]
|
|
13
13
|
|
|
14
14
|
[[package]]
|
|
15
|
-
name = "
|
|
16
|
-
version = "
|
|
15
|
+
name = "anyio"
|
|
16
|
+
version = "4.9.0"
|
|
17
17
|
source = { registry = "https://pypi.org/simple" }
|
|
18
|
-
|
|
18
|
+
dependencies = [
|
|
19
|
+
{ name = "idna" },
|
|
20
|
+
{ name = "sniffio" },
|
|
21
|
+
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
|
22
|
+
]
|
|
23
|
+
sdist = { url = "https://files.pythonhosted.org/packages/95/7d/4c1bd541d4dffa1b52bd83fb8527089e097a106fc90b467a7313b105f840/anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028", size = 190949, upload-time = "2025-03-17T00:02:54.77Z" }
|
|
19
24
|
wheels = [
|
|
20
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
25
|
+
{ url = "https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c", size = 100916, upload-time = "2025-03-17T00:02:52.713Z" },
|
|
21
26
|
]
|
|
22
27
|
|
|
23
28
|
[[package]]
|
|
24
|
-
name = "
|
|
25
|
-
version = "
|
|
29
|
+
name = "certifi"
|
|
30
|
+
version = "2025.7.14"
|
|
26
31
|
source = { registry = "https://pypi.org/simple" }
|
|
27
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
32
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b3/76/52c535bcebe74590f296d6c77c86dabf761c41980e1347a2422e4aa2ae41/certifi-2025.7.14.tar.gz", hash = "sha256:8ea99dbdfaaf2ba2f9bac77b9249ef62ec5218e7c2b2e903378ed5fccf765995", size = 163981, upload-time = "2025-07-14T03:29:28.449Z" }
|
|
28
33
|
wheels = [
|
|
29
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
30
|
-
{ url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" },
|
|
31
|
-
{ url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" },
|
|
32
|
-
{ url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" },
|
|
33
|
-
{ url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" },
|
|
34
|
-
{ url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" },
|
|
35
|
-
{ url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" },
|
|
36
|
-
{ url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" },
|
|
37
|
-
{ url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" },
|
|
38
|
-
{ url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" },
|
|
39
|
-
{ url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" },
|
|
40
|
-
{ url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" },
|
|
41
|
-
{ url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" },
|
|
42
|
-
{ url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" },
|
|
43
|
-
{ url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" },
|
|
44
|
-
{ url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" },
|
|
45
|
-
{ url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" },
|
|
46
|
-
{ url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" },
|
|
47
|
-
{ url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" },
|
|
48
|
-
{ url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" },
|
|
49
|
-
{ url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" },
|
|
50
|
-
{ url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" },
|
|
51
|
-
{ url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" },
|
|
52
|
-
{ url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" },
|
|
53
|
-
{ url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" },
|
|
54
|
-
{ url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" },
|
|
55
|
-
{ url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" },
|
|
34
|
+
{ url = "https://files.pythonhosted.org/packages/4f/52/34c6cf5bb9285074dc3531c437b3919e825d976fde097a7a73f79e726d03/certifi-2025.7.14-py3-none-any.whl", hash = "sha256:6b31f564a415d79ee77df69d757bb49a5bb53bd9f756cbbe24394ffd6fc1f4b2", size = 162722, upload-time = "2025-07-14T03:29:26.863Z" },
|
|
56
35
|
]
|
|
57
36
|
|
|
58
37
|
[[package]]
|
|
@@ -78,21 +57,58 @@ wheels = [
|
|
|
78
57
|
|
|
79
58
|
[[package]]
|
|
80
59
|
name = "git-copilot-commit"
|
|
81
|
-
version = "0.1.
|
|
60
|
+
version = "0.1.8"
|
|
82
61
|
source = { editable = "." }
|
|
83
62
|
dependencies = [
|
|
63
|
+
{ name = "platformdirs" },
|
|
84
64
|
{ name = "pycopilot" },
|
|
85
65
|
{ name = "rich" },
|
|
86
66
|
{ name = "typer" },
|
|
87
|
-
{ name = "xdg-base-dirs" },
|
|
88
67
|
]
|
|
89
68
|
|
|
90
69
|
[package.metadata]
|
|
91
70
|
requires-dist = [
|
|
92
|
-
{ name = "
|
|
71
|
+
{ name = "platformdirs", specifier = ">=4.0.0" },
|
|
72
|
+
{ name = "pycopilot", specifier = ">=0.1.6" },
|
|
93
73
|
{ name = "rich", specifier = ">=14.0.0" },
|
|
94
74
|
{ name = "typer", specifier = ">=0.16.0" },
|
|
95
|
-
|
|
75
|
+
]
|
|
76
|
+
|
|
77
|
+
[[package]]
|
|
78
|
+
name = "h11"
|
|
79
|
+
version = "0.16.0"
|
|
80
|
+
source = { registry = "https://pypi.org/simple" }
|
|
81
|
+
sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" }
|
|
82
|
+
wheels = [
|
|
83
|
+
{ url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" },
|
|
84
|
+
]
|
|
85
|
+
|
|
86
|
+
[[package]]
|
|
87
|
+
name = "httpcore"
|
|
88
|
+
version = "1.0.9"
|
|
89
|
+
source = { registry = "https://pypi.org/simple" }
|
|
90
|
+
dependencies = [
|
|
91
|
+
{ name = "certifi" },
|
|
92
|
+
{ name = "h11" },
|
|
93
|
+
]
|
|
94
|
+
sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" }
|
|
95
|
+
wheels = [
|
|
96
|
+
{ url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" },
|
|
97
|
+
]
|
|
98
|
+
|
|
99
|
+
[[package]]
|
|
100
|
+
name = "httpx"
|
|
101
|
+
version = "0.28.1"
|
|
102
|
+
source = { registry = "https://pypi.org/simple" }
|
|
103
|
+
dependencies = [
|
|
104
|
+
{ name = "anyio" },
|
|
105
|
+
{ name = "certifi" },
|
|
106
|
+
{ name = "httpcore" },
|
|
107
|
+
{ name = "idna" },
|
|
108
|
+
]
|
|
109
|
+
sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" }
|
|
110
|
+
wheels = [
|
|
111
|
+
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
|
|
96
112
|
]
|
|
97
113
|
|
|
98
114
|
[[package]]
|
|
@@ -148,20 +164,20 @@ wheels = [
|
|
|
148
164
|
|
|
149
165
|
[[package]]
|
|
150
166
|
name = "pycopilot"
|
|
151
|
-
version = "0.1.
|
|
167
|
+
version = "0.1.6"
|
|
152
168
|
source = { registry = "https://pypi.org/simple" }
|
|
153
169
|
dependencies = [
|
|
170
|
+
{ name = "httpx" },
|
|
154
171
|
{ name = "platformdirs" },
|
|
155
172
|
{ name = "prompt-toolkit" },
|
|
156
173
|
{ name = "pydantic" },
|
|
157
174
|
{ name = "questionary" },
|
|
158
|
-
{ name = "requests" },
|
|
159
175
|
{ name = "rich" },
|
|
160
176
|
{ name = "typer" },
|
|
161
177
|
]
|
|
162
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
178
|
+
sdist = { url = "https://files.pythonhosted.org/packages/45/ae/9d540cfe9411ad9f5ab58080aab86a5a7902ab668ad16fb637f287c88ba7/pycopilot-0.1.6.tar.gz", hash = "sha256:84425265e0d587d964e7b5dd93de9d9175b849b7d718107a48efb749e5b88e8e", size = 31667, upload-time = "2025-07-17T15:39:42.473Z" }
|
|
163
179
|
wheels = [
|
|
164
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
180
|
+
{ url = "https://files.pythonhosted.org/packages/3e/5f/56cd35579f5d400b2ef9f0c62b41f6024936fbfc8f69e302036588052531/pycopilot-0.1.6-py3-none-any.whl", hash = "sha256:88f39535a87d1efdc2358357d956bbe0d9e6b5a6fd60d572d46c813fe23af2d0", size = 10811, upload-time = "2025-07-17T15:39:41.608Z" },
|
|
165
181
|
]
|
|
166
182
|
|
|
167
183
|
[[package]]
|
|
@@ -242,21 +258,6 @@ wheels = [
|
|
|
242
258
|
{ url = "https://files.pythonhosted.org/packages/ad/3f/11dd4cd4f39e05128bfd20138faea57bec56f9ffba6185d276e3107ba5b2/questionary-2.1.0-py3-none-any.whl", hash = "sha256:44174d237b68bc828e4878c763a9ad6790ee61990e0ae72927694ead57bab8ec", size = 36747, upload-time = "2024-12-29T11:49:16.734Z" },
|
|
243
259
|
]
|
|
244
260
|
|
|
245
|
-
[[package]]
|
|
246
|
-
name = "requests"
|
|
247
|
-
version = "2.32.4"
|
|
248
|
-
source = { registry = "https://pypi.org/simple" }
|
|
249
|
-
dependencies = [
|
|
250
|
-
{ name = "certifi" },
|
|
251
|
-
{ name = "charset-normalizer" },
|
|
252
|
-
{ name = "idna" },
|
|
253
|
-
{ name = "urllib3" },
|
|
254
|
-
]
|
|
255
|
-
sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" }
|
|
256
|
-
wheels = [
|
|
257
|
-
{ url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" },
|
|
258
|
-
]
|
|
259
|
-
|
|
260
261
|
[[package]]
|
|
261
262
|
name = "rich"
|
|
262
263
|
version = "14.0.0"
|
|
@@ -279,6 +280,15 @@ wheels = [
|
|
|
279
280
|
{ url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" },
|
|
280
281
|
]
|
|
281
282
|
|
|
283
|
+
[[package]]
|
|
284
|
+
name = "sniffio"
|
|
285
|
+
version = "1.3.1"
|
|
286
|
+
source = { registry = "https://pypi.org/simple" }
|
|
287
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" }
|
|
288
|
+
wheels = [
|
|
289
|
+
{ url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" },
|
|
290
|
+
]
|
|
291
|
+
|
|
282
292
|
[[package]]
|
|
283
293
|
name = "typer"
|
|
284
294
|
version = "0.16.0"
|
|
@@ -315,15 +325,6 @@ wheels = [
|
|
|
315
325
|
{ url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" },
|
|
316
326
|
]
|
|
317
327
|
|
|
318
|
-
[[package]]
|
|
319
|
-
name = "urllib3"
|
|
320
|
-
version = "2.5.0"
|
|
321
|
-
source = { registry = "https://pypi.org/simple" }
|
|
322
|
-
sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" }
|
|
323
|
-
wheels = [
|
|
324
|
-
{ url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
|
|
325
|
-
]
|
|
326
|
-
|
|
327
328
|
[[package]]
|
|
328
329
|
name = "wcwidth"
|
|
329
330
|
version = "0.2.13"
|
|
@@ -332,12 +333,3 @@ sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc
|
|
|
332
333
|
wheels = [
|
|
333
334
|
{ url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" },
|
|
334
335
|
]
|
|
335
|
-
|
|
336
|
-
[[package]]
|
|
337
|
-
name = "xdg-base-dirs"
|
|
338
|
-
version = "6.0.2"
|
|
339
|
-
source = { registry = "https://pypi.org/simple" }
|
|
340
|
-
sdist = { url = "https://files.pythonhosted.org/packages/bf/d0/bbe05a15347538aaf9fa5b51ac3b97075dfb834931fcb77d81fbdb69e8f6/xdg_base_dirs-6.0.2.tar.gz", hash = "sha256:950504e14d27cf3c9cb37744680a43bf0ac42efefc4ef4acf98dc736cab2bced", size = 4085, upload-time = "2024-10-19T14:35:08.114Z" }
|
|
341
|
-
wheels = [
|
|
342
|
-
{ url = "https://files.pythonhosted.org/packages/fc/03/030b47fd46b60fc87af548e57ff59c2ca84b2a1dadbe721bb0ce33896b2e/xdg_base_dirs-6.0.2-py3-none-any.whl", hash = "sha256:3c01d1b758ed4ace150ac960ac0bd13ce4542b9e2cdf01312dcda5012cfebabe", size = 4747, upload-time = "2024-10-19T14:35:05.931Z" },
|
|
343
|
-
]
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: git-copilot-commit
|
|
3
|
-
Version: 0.1.6
|
|
4
|
-
Summary: Automatically generate and commit changes using copilot
|
|
5
|
-
Author-email: Dheepak Krishnamurthy <1813121+kdheepak@users.noreply.github.com>
|
|
6
|
-
License-File: LICENSE
|
|
7
|
-
Requires-Python: >=3.12
|
|
8
|
-
Requires-Dist: pycopilot>=0.1.1
|
|
9
|
-
Requires-Dist: rich>=14.0.0
|
|
10
|
-
Requires-Dist: typer>=0.16.0
|
|
11
|
-
Requires-Dist: xdg-base-dirs>=6.0.2
|
|
12
|
-
Description-Content-Type: text/markdown
|
|
13
|
-
|
|
14
|
-
# git-copilot-commit
|
|
15
|
-
|
|
16
|
-
🤖 AI-powered Git commit assistant that automatically generates conventional commit messages using
|
|
17
|
-
GitHub Copilot.
|
|
18
|
-
|
|
19
|
-
## Features
|
|
20
|
-
|
|
21
|
-
- **AI-Generated Commit Messages**: Uses GitHub Copilot to analyze your staged changes and generate
|
|
22
|
-
conventional commit messages
|
|
23
|
-
- **Multiple AI Models**: Choose from GPT-4, Claude, Gemini, and other available models
|
|
24
|
-
- **Configurable Defaults**: Set a default model to use across all commits
|
|
25
|
-
- **Message Editing**: Edit generated messages using your git-configured editor or commit directly
|
|
26
|
-
- **Conventional Commits**: Follows the [Conventional Commits](https://www.conventionalcommits.org/)
|
|
27
|
-
specification
|
|
28
|
-
- **Rich Output**: Beautiful terminal output with syntax highlighting and tables
|
|
29
|
-
|
|
30
|
-
## Installation
|
|
31
|
-
|
|
32
|
-
Install using uv (recommended):
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
uv tool install git-copilot-commit
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Or with pip:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
pipx install git-copilot-commit
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Or without installing:
|
|
45
|
-
|
|
46
|
-
```bash
|
|
47
|
-
uvx git-copilot-commit --help
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
## Prerequisites
|
|
51
|
-
|
|
52
|
-
**GitHub Copilot Access**: You need an active GitHub Copilot subscription
|
|
53
|
-
|
|
54
|
-
## Quick Start
|
|
55
|
-
|
|
56
|
-
1. **Authenticate with GitHub Copilot**:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
git-copilot-commit authenticate
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
2. **Make some changes** in your git repository
|
|
63
|
-
|
|
64
|
-
3. **Generate and commit**:
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
git-copilot-commit commit
|
|
68
|
-
```
|
|
69
|
-
|
|
70
|
-
## Usage
|
|
71
|
-
|
|
72
|
-
### `commit`
|
|
73
|
-
|
|
74
|
-
Automatically commit changes in the current git repository:
|
|
75
|
-
|
|
76
|
-
```bash
|
|
77
|
-
git-copilot-commit commit
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
**Options:**
|
|
81
|
-
|
|
82
|
-
- `--all, -a`: Stage all files before committing
|
|
83
|
-
- `--verbose, -v`: Show verbose output with file details
|
|
84
|
-
- `--model, -m`: Specify which AI model to use for generating the commit message
|
|
85
|
-
|
|
86
|
-
1. The tool analyzes your changes
|
|
87
|
-
2. Prompts you to stage files (if needed)
|
|
88
|
-
3. Generates an AI-powered commit message
|
|
89
|
-
4. Offers three choices:
|
|
90
|
-
- `(c)ommit`: Commit with the generated message
|
|
91
|
-
- `(e)dit`: Edit the message in your git-configured editor
|
|
92
|
-
- `(q)uit`: Cancel the commit
|
|
93
|
-
|
|
94
|
-
### `authenticate`
|
|
95
|
-
|
|
96
|
-
Set up authentication with GitHub Copilot:
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
git-copilot-commit authenticate
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### `models`
|
|
103
|
-
|
|
104
|
-
List available AI models:
|
|
105
|
-
|
|
106
|
-
```bash
|
|
107
|
-
git-copilot-commit models
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### `config`
|
|
111
|
-
|
|
112
|
-
Manage application configuration:
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
# Show current configuration
|
|
116
|
-
git-copilot-commit config --show
|
|
117
|
-
|
|
118
|
-
# Set a default model for all commits
|
|
119
|
-
git-copilot-commit config --set-default-model gpt-4o
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Examples
|
|
123
|
-
|
|
124
|
-
**Commit all changes with staging prompts:**
|
|
125
|
-
|
|
126
|
-
```bash
|
|
127
|
-
git-copilot-commit commit --all
|
|
128
|
-
```
|
|
129
|
-
|
|
130
|
-
**Commit with verbose output:**
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
git-copilot-commit commit --verbose
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
**Use a specific AI model:**
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
git-copilot-commit commit --model claude-3.5-sonnet
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
**Set up a default model and use it:**
|
|
143
|
-
|
|
144
|
-
```bash
|
|
145
|
-
# Set default model once
|
|
146
|
-
git-copilot-commit config --set-default-model gpt-4o
|
|
147
|
-
|
|
148
|
-
# Now all commits will use gpt-4o by default
|
|
149
|
-
git-copilot-commit commit
|
|
150
|
-
|
|
151
|
-
# Override with a different model when needed
|
|
152
|
-
git-copilot-commit commit --model claude-3.5-sonnet
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## Generated Commit Message Format
|
|
156
|
-
|
|
157
|
-
The tool follows the [Conventional Commits](https://www.conventionalcommits.org/) specification:
|
|
158
|
-
|
|
159
|
-
```
|
|
160
|
-
<type>[optional scope]: <description>
|
|
161
|
-
```
|
|
162
|
-
|
|
163
|
-
**Supported Types:**
|
|
164
|
-
|
|
165
|
-
- `feat`: A new feature
|
|
166
|
-
- `fix`: A bug fix
|
|
167
|
-
- `docs`: Documentation changes
|
|
168
|
-
- `style`: Code formatting (no logic changes)
|
|
169
|
-
- `refactor`: Code restructuring (no behavior changes)
|
|
170
|
-
- `perf`: Performance improvements
|
|
171
|
-
- `test`: Adding or updating tests
|
|
172
|
-
- `chore`: Maintenance tasks (tooling, dependencies, etc.)
|
|
173
|
-
- `revert`: Reverting previous changes
|
|
174
|
-
|
|
175
|
-
**Example Messages:**
|
|
176
|
-
|
|
177
|
-
- `feat(auth): add user authentication with JWT`
|
|
178
|
-
- `fix(database): handle connection retries properly`
|
|
179
|
-
- `docs(readme): update installation instructions`
|
|
180
|
-
- `refactor(utils): simplify date parsing logic`
|
|
181
|
-
|
|
182
|
-
## Git Configuration
|
|
183
|
-
|
|
184
|
-
For the best experience with git-copilot-commit, consider adding this alias for the commit command:
|
|
185
|
-
|
|
186
|
-
```bash
|
|
187
|
-
# Add a git alias for quick access
|
|
188
|
-
git config --global alias.ai-commit "!git-copilot-commit commit"
|
|
189
|
-
|
|
190
|
-
# Now you can use:
|
|
191
|
-
git ai-commit
|
|
192
|
-
git ai-commit --model claude-3.5-sonnet
|
|
193
|
-
git ai-commit --all --verbose
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
You can also configure git to show more context in diffs, which can help when reviewing changes:
|
|
197
|
-
|
|
198
|
-
```bash
|
|
199
|
-
# Show more context in diffs
|
|
200
|
-
git config --global diff.context 3
|
|
201
|
-
```
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
# git-copilot-commit
|
|
2
|
-
|
|
3
|
-
🤖 AI-powered Git commit assistant that automatically generates conventional commit messages using
|
|
4
|
-
GitHub Copilot.
|
|
5
|
-
|
|
6
|
-
## Features
|
|
7
|
-
|
|
8
|
-
- **AI-Generated Commit Messages**: Uses GitHub Copilot to analyze your staged changes and generate
|
|
9
|
-
conventional commit messages
|
|
10
|
-
- **Multiple AI Models**: Choose from GPT-4, Claude, Gemini, and other available models
|
|
11
|
-
- **Configurable Defaults**: Set a default model to use across all commits
|
|
12
|
-
- **Message Editing**: Edit generated messages using your git-configured editor or commit directly
|
|
13
|
-
- **Conventional Commits**: Follows the [Conventional Commits](https://www.conventionalcommits.org/)
|
|
14
|
-
specification
|
|
15
|
-
- **Rich Output**: Beautiful terminal output with syntax highlighting and tables
|
|
16
|
-
|
|
17
|
-
## Installation
|
|
18
|
-
|
|
19
|
-
Install using uv (recommended):
|
|
20
|
-
|
|
21
|
-
```bash
|
|
22
|
-
uv tool install git-copilot-commit
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Or with pip:
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
pipx install git-copilot-commit
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
Or without installing:
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
uvx git-copilot-commit --help
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## Prerequisites
|
|
38
|
-
|
|
39
|
-
**GitHub Copilot Access**: You need an active GitHub Copilot subscription
|
|
40
|
-
|
|
41
|
-
## Quick Start
|
|
42
|
-
|
|
43
|
-
1. **Authenticate with GitHub Copilot**:
|
|
44
|
-
|
|
45
|
-
```bash
|
|
46
|
-
git-copilot-commit authenticate
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
2. **Make some changes** in your git repository
|
|
50
|
-
|
|
51
|
-
3. **Generate and commit**:
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
git-copilot-commit commit
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
## Usage
|
|
58
|
-
|
|
59
|
-
### `commit`
|
|
60
|
-
|
|
61
|
-
Automatically commit changes in the current git repository:
|
|
62
|
-
|
|
63
|
-
```bash
|
|
64
|
-
git-copilot-commit commit
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
**Options:**
|
|
68
|
-
|
|
69
|
-
- `--all, -a`: Stage all files before committing
|
|
70
|
-
- `--verbose, -v`: Show verbose output with file details
|
|
71
|
-
- `--model, -m`: Specify which AI model to use for generating the commit message
|
|
72
|
-
|
|
73
|
-
1. The tool analyzes your changes
|
|
74
|
-
2. Prompts you to stage files (if needed)
|
|
75
|
-
3. Generates an AI-powered commit message
|
|
76
|
-
4. Offers three choices:
|
|
77
|
-
- `(c)ommit`: Commit with the generated message
|
|
78
|
-
- `(e)dit`: Edit the message in your git-configured editor
|
|
79
|
-
- `(q)uit`: Cancel the commit
|
|
80
|
-
|
|
81
|
-
### `authenticate`
|
|
82
|
-
|
|
83
|
-
Set up authentication with GitHub Copilot:
|
|
84
|
-
|
|
85
|
-
```bash
|
|
86
|
-
git-copilot-commit authenticate
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### `models`
|
|
90
|
-
|
|
91
|
-
List available AI models:
|
|
92
|
-
|
|
93
|
-
```bash
|
|
94
|
-
git-copilot-commit models
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### `config`
|
|
98
|
-
|
|
99
|
-
Manage application configuration:
|
|
100
|
-
|
|
101
|
-
```bash
|
|
102
|
-
# Show current configuration
|
|
103
|
-
git-copilot-commit config --show
|
|
104
|
-
|
|
105
|
-
# Set a default model for all commits
|
|
106
|
-
git-copilot-commit config --set-default-model gpt-4o
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Examples
|
|
110
|
-
|
|
111
|
-
**Commit all changes with staging prompts:**
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
git-copilot-commit commit --all
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
**Commit with verbose output:**
|
|
118
|
-
|
|
119
|
-
```bash
|
|
120
|
-
git-copilot-commit commit --verbose
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
**Use a specific AI model:**
|
|
124
|
-
|
|
125
|
-
```bash
|
|
126
|
-
git-copilot-commit commit --model claude-3.5-sonnet
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
**Set up a default model and use it:**
|
|
130
|
-
|
|
131
|
-
```bash
|
|
132
|
-
# Set default model once
|
|
133
|
-
git-copilot-commit config --set-default-model gpt-4o
|
|
134
|
-
|
|
135
|
-
# Now all commits will use gpt-4o by default
|
|
136
|
-
git-copilot-commit commit
|
|
137
|
-
|
|
138
|
-
# Override with a different model when needed
|
|
139
|
-
git-copilot-commit commit --model claude-3.5-sonnet
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
## Generated Commit Message Format
|
|
143
|
-
|
|
144
|
-
The tool follows the [Conventional Commits](https://www.conventionalcommits.org/) specification:
|
|
145
|
-
|
|
146
|
-
```
|
|
147
|
-
<type>[optional scope]: <description>
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
**Supported Types:**
|
|
151
|
-
|
|
152
|
-
- `feat`: A new feature
|
|
153
|
-
- `fix`: A bug fix
|
|
154
|
-
- `docs`: Documentation changes
|
|
155
|
-
- `style`: Code formatting (no logic changes)
|
|
156
|
-
- `refactor`: Code restructuring (no behavior changes)
|
|
157
|
-
- `perf`: Performance improvements
|
|
158
|
-
- `test`: Adding or updating tests
|
|
159
|
-
- `chore`: Maintenance tasks (tooling, dependencies, etc.)
|
|
160
|
-
- `revert`: Reverting previous changes
|
|
161
|
-
|
|
162
|
-
**Example Messages:**
|
|
163
|
-
|
|
164
|
-
- `feat(auth): add user authentication with JWT`
|
|
165
|
-
- `fix(database): handle connection retries properly`
|
|
166
|
-
- `docs(readme): update installation instructions`
|
|
167
|
-
- `refactor(utils): simplify date parsing logic`
|
|
168
|
-
|
|
169
|
-
## Git Configuration
|
|
170
|
-
|
|
171
|
-
For the best experience with git-copilot-commit, consider adding this alias for the commit command:
|
|
172
|
-
|
|
173
|
-
```bash
|
|
174
|
-
# Add a git alias for quick access
|
|
175
|
-
git config --global alias.ai-commit "!git-copilot-commit commit"
|
|
176
|
-
|
|
177
|
-
# Now you can use:
|
|
178
|
-
git ai-commit
|
|
179
|
-
git ai-commit --model claude-3.5-sonnet
|
|
180
|
-
git ai-commit --all --verbose
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
You can also configure git to show more context in diffs, which can help when reviewing changes:
|
|
184
|
-
|
|
185
|
-
```bash
|
|
186
|
-
# Show more context in diffs
|
|
187
|
-
git config --global diff.context 3
|
|
188
|
-
```
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
[project]
|
|
2
|
-
name = "git-copilot-commit"
|
|
3
|
-
version = "0.1.6"
|
|
4
|
-
description = "Automatically generate and commit changes using copilot"
|
|
5
|
-
readme = "README.md"
|
|
6
|
-
authors = [
|
|
7
|
-
{ name = "Dheepak Krishnamurthy", email = "1813121+kdheepak@users.noreply.github.com" },
|
|
8
|
-
]
|
|
9
|
-
requires-python = ">=3.12"
|
|
10
|
-
dependencies = [
|
|
11
|
-
"pycopilot>=0.1.1",
|
|
12
|
-
"rich>=14.0.0",
|
|
13
|
-
"typer>=0.16.0",
|
|
14
|
-
"xdg-base-dirs>=6.0.2",
|
|
15
|
-
]
|
|
16
|
-
|
|
17
|
-
[project.scripts]
|
|
18
|
-
git-copilot-commit = "git_copilot_commit.cli:app"
|
|
19
|
-
|
|
20
|
-
[build-system]
|
|
21
|
-
requires = ["hatchling"]
|
|
22
|
-
build-backend = "hatchling.build"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|