Skip to content

Commit 2fd957e

Browse files
committed
chore: refactor commit message generation
- Add template vars to the `data` variable - Add template vars from file to the `data` variable - Get code review message from diff datas - Get summarize title from diff datas - Support conventional commits - Get summarize prefix from diff datas - Initialize the `commitMessage` variable Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
1 parent 2dacf12 commit 2fd957e

File tree

2 files changed

+90
-84
lines changed

2 files changed

+90
-84
lines changed

cmd/commit.go

Lines changed: 87 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -106,89 +106,7 @@ var commitCmd = &cobra.Command{
106106
return err
107107
}
108108

109-
out, err := util.GetTemplateByString(
110-
prompt.SummarizeFileDiffTemplate,
111-
util.Data{
112-
"file_diffs": diff,
113-
},
114-
)
115-
if err != nil {
116-
return err
117-
}
118-
119-
// determine if the user wants to use the prompt only
120-
if promptOnly {
121-
color.Yellow("====================Prompt========================")
122-
color.Yellow("\n" + strings.TrimSpace(out) + "\n\n")
123-
color.Yellow("==================================================")
124-
return nil
125-
}
126-
127-
// Get summarize comment from diff datas
128-
color.Cyan("We are trying to summarize a git diff")
129-
resp, err := client.Completion(cmd.Context(), out)
130-
if err != nil {
131-
return err
132-
}
133-
summarizeMessage := resp.Content
134-
color.Magenta("PromptTokens: " + strconv.Itoa(resp.Usage.PromptTokens) +
135-
", CompletionTokens: " + strconv.Itoa(resp.Usage.CompletionTokens) +
136-
", TotalTokens: " + strconv.Itoa(resp.Usage.TotalTokens),
137-
)
138-
139-
out, err = util.GetTemplateByString(
140-
prompt.SummarizeTitleTemplate,
141-
util.Data{
142-
"summary_points": summarizeMessage,
143-
},
144-
)
145-
if err != nil {
146-
return err
147-
}
148-
149-
// Get summarize title from diff datas
150-
color.Cyan("We are trying to summarize a title for pull request")
151-
resp, err = client.Completion(cmd.Context(), out)
152-
if err != nil {
153-
return err
154-
}
155-
summarizeTitle := resp.Content
156-
color.Magenta("PromptTokens: " + strconv.Itoa(resp.Usage.PromptTokens) +
157-
", CompletionTokens: " + strconv.Itoa(resp.Usage.CompletionTokens) +
158-
", TotalTokens: " + strconv.Itoa(resp.Usage.TotalTokens),
159-
)
160-
161-
// lowercase the first character of first word of the commit message and remove last period
162-
summarizeTitle = strings.TrimRight(strings.ToLower(string(summarizeTitle[0]))+summarizeTitle[1:], ".")
163-
164-
// support conventional commits
165-
out, err = util.GetTemplateByString(
166-
prompt.ConventionalCommitTemplate,
167-
util.Data{
168-
"summary_points": summarizeMessage,
169-
},
170-
)
171-
if err != nil {
172-
return err
173-
}
174-
color.Cyan("We are trying to get conventional commit prefix")
175-
resp, err = client.Completion(cmd.Context(), out)
176-
if err != nil {
177-
return err
178-
}
179-
summarizePrefix := resp.Content
180-
color.Magenta("PromptTokens: " + strconv.Itoa(resp.Usage.PromptTokens) +
181-
", CompletionTokens: " + strconv.Itoa(resp.Usage.CompletionTokens) +
182-
", TotalTokens: " + strconv.Itoa(resp.Usage.TotalTokens),
183-
)
184-
185-
var commitMessage string
186-
data := util.Data{
187-
"summarize_prefix": strings.TrimSpace(summarizePrefix),
188-
"summarize_title": strings.TrimSpace(summarizeTitle),
189-
"summarize_message": strings.TrimSpace(summarizeMessage),
190-
}
191-
109+
data := util.Data{}
192110
// add template vars
193111
if vars := util.ConvertToMap(templateVars); len(vars) > 0 {
194112
for k, v := range vars {
@@ -207,6 +125,91 @@ var commitCmd = &cobra.Command{
207125
}
208126
}
209127

128+
// Get code review message from diff datas
129+
if _, ok := data[prompt.SummarizeMessageKey]; !ok {
130+
out, err := util.GetTemplateByString(
131+
prompt.SummarizeFileDiffTemplate,
132+
util.Data{
133+
"file_diffs": diff,
134+
},
135+
)
136+
if err != nil {
137+
return err
138+
}
139+
140+
// determine if the user wants to use the prompt only
141+
if promptOnly {
142+
color.Yellow("====================Prompt========================")
143+
color.Yellow("\n" + strings.TrimSpace(out) + "\n\n")
144+
color.Yellow("==================================================")
145+
return nil
146+
}
147+
148+
// Get summarize comment from diff datas
149+
color.Cyan("We are trying to summarize a git diff")
150+
resp, err := client.Completion(cmd.Context(), out)
151+
if err != nil {
152+
return err
153+
}
154+
data[prompt.SummarizeMessageKey] = strings.TrimSpace(resp.Content)
155+
color.Magenta("PromptTokens: " + strconv.Itoa(resp.Usage.PromptTokens) +
156+
", CompletionTokens: " + strconv.Itoa(resp.Usage.CompletionTokens) +
157+
", TotalTokens: " + strconv.Itoa(resp.Usage.TotalTokens),
158+
)
159+
}
160+
161+
// Get summarize title from diff datas
162+
if _, ok := data[prompt.SummarizeTitleKey]; !ok {
163+
out, err := util.GetTemplateByString(
164+
prompt.SummarizeTitleTemplate,
165+
util.Data{
166+
"summary_points": data[prompt.SummarizeMessageKey],
167+
},
168+
)
169+
if err != nil {
170+
return err
171+
}
172+
173+
// Get summarize title from diff datas
174+
color.Cyan("We are trying to summarize a title for pull request")
175+
resp, err := client.Completion(cmd.Context(), out)
176+
if err != nil {
177+
return err
178+
}
179+
summarizeTitle := resp.Content
180+
color.Magenta("PromptTokens: " + strconv.Itoa(resp.Usage.PromptTokens) +
181+
", CompletionTokens: " + strconv.Itoa(resp.Usage.CompletionTokens) +
182+
", TotalTokens: " + strconv.Itoa(resp.Usage.TotalTokens),
183+
)
184+
185+
// lowercase the first character of first word of the commit message and remove last period
186+
summarizeTitle = strings.TrimRight(strings.ToLower(string(summarizeTitle[0]))+summarizeTitle[1:], ".")
187+
data[prompt.SummarizeTitleKey] = strings.TrimSpace(summarizeTitle)
188+
}
189+
190+
if _, ok := data[prompt.SummarizePrefixKey]; !ok {
191+
out, err := util.GetTemplateByString(
192+
prompt.ConventionalCommitTemplate,
193+
util.Data{
194+
"summary_points": data[prompt.SummarizeMessageKey],
195+
},
196+
)
197+
if err != nil {
198+
return err
199+
}
200+
color.Cyan("We are trying to get conventional commit prefix")
201+
resp, err := client.Completion(cmd.Context(), out)
202+
if err != nil {
203+
return err
204+
}
205+
data[prompt.SummarizePrefixKey] = strings.TrimSpace(resp.Content)
206+
color.Magenta("PromptTokens: " + strconv.Itoa(resp.Usage.PromptTokens) +
207+
", CompletionTokens: " + strconv.Itoa(resp.Usage.CompletionTokens) +
208+
", TotalTokens: " + strconv.Itoa(resp.Usage.TotalTokens),
209+
)
210+
}
211+
212+
var commitMessage string
210213
if viper.GetString("git.template_file") != "" {
211214
format, err := os.ReadFile(viper.GetString("git.template_file"))
212215
if err != nil {
@@ -238,7 +241,7 @@ var commitCmd = &cobra.Command{
238241
}
239242

240243
if prompt.GetLanguage(viper.GetString("output.lang")) != prompt.DefaultLanguage {
241-
out, err = util.GetTemplateByString(
244+
out, err := util.GetTemplateByString(
242245
prompt.TranslationTemplate,
243246
util.Data{
244247
"output_language": prompt.GetLanguage(viper.GetString("output.lang")),

prompt/prompt.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ const (
1717
SummarizeTitleTemplate = "summarize_title.tmpl"
1818
ConventionalCommitTemplate = "conventional_commit.tmpl"
1919
TranslationTemplate = "translation.tmpl"
20+
SummarizePrefixKey = "summarize_prefix"
21+
SummarizeTitleKey = "summarize_title"
22+
SummarizeMessageKey = "summarize_message"
2023
)
2124

2225
// Initializes the prompt package by loading the templates from the embedded file system.

0 commit comments

Comments
 (0)