Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 48 additions & 1 deletion index.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,17 @@ import { sanitizeCommitMessage } from './utils/sanitizeCommitMessage.js'
let openai
let model = 'gpt-4o' // Default model
let language = 'English' // Default language
// Define prefixState using closure for safer state management
const prefixState = (() => {
let enabled = false // Default is disabled
return {
isEnabled: () => enabled,
setEnabled: (value) => {
enabled = value
return value
},
}
})()
const CONFIG_FILE = path.join(os.homedir(), '.git-gpt-commit-config.json')

// Function to save config to file
Expand Down Expand Up @@ -44,6 +55,9 @@ function loadConfig() {
if (config.language) {
language = config.language
}
if (config.prefixEnabled !== undefined) {
prefixState.setEnabled(config.prefixEnabled)
}
}
} catch (error) {
console.error('Error loading configuration:', error)
Expand Down Expand Up @@ -91,7 +105,9 @@ const gptCommit = async () => {
},
{
role: 'user',
content: `Generate a Git commit message based on the following summary: ${gitSummary}\n\nCommit message: `,
content: prefixState.isEnabled()
? `Generate a Git commit message based on the following summary, with an appropriate prefix (add:, fix:, feat:, refactor:, chore:, perf:, test:, style:, docs:, merge:, chore:, build:, ci:, revert:, merge:) based on the type of changes: ${gitSummary}\n\nCommit message: `
: `Generate a Git commit message based on the following summary: ${gitSummary}\n\nCommit message: `,
},
]

Expand Down Expand Up @@ -191,12 +207,43 @@ const gitExtension = (_args) => {
console.log(`Language set to ${language} and saved to configuration`)
})

program
.command('prefix')
.description('Toggle commit message prefix (e.g., fix:, feat:, refactor:)')
.action(async () => {
// Show the current state for user information
console.log(
`Prefixes are currently ${prefixState.isEnabled() ? 'enabled' : 'disabled'}.`,
)

const response = await prompts({
type: 'select',
name: 'value',
message: 'Set commit message prefixes',
choices: [
{ title: 'Enable prefixes', value: true },
{ title: 'Disable prefixes', value: false },
],
initial: prefixState.isEnabled() ? 0 : 1,
})

// Update state and save to config
const newValue = prefixState.setEnabled(response.value)
saveConfig({ prefixEnabled: newValue })
console.log(
`Prefixes ${newValue ? 'enabled' : 'disabled'} and saved to configuration`,
)
})

program
.command('config')
.description('Show current configuration')
.action(() => {
console.log(`Current model: ${model}`)
console.log(`Current language: ${language}`)
console.log(
`Prefixes: ${prefixState.isEnabled() ? 'enabled' : 'disabled'}`,
)
})

// Handle invalid commands
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@laststance/git-gpt-commit",
"version": "0.8.9",
"version": "0.8.10",
"description": "An AI-powered Git extension that generates commit messages using OpenAI's GPT-3, streamlining the commit process and improving developer productivity.",
"main": "index.js",
"type": "module",
Expand Down