Skip to content

Commit 06dfdf5

Browse files
fix: Refactor code, add interactive prompts for commit prefix and message, improve user-friendliness.
1 parent 3bf2bcc commit 06dfdf5

1 file changed

Lines changed: 51 additions & 46 deletions

File tree

main.go

Lines changed: 51 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
var messages = []*Message{
1515
{
1616
Role: "system",
17-
Content: `You are a developer, you are very good at write git commit, write commit message for this diff, only response the message:`,
17+
Content: `You are a commit message generator, you are not able to talk like human, you can only produce commit message, write commit message for user's diff output, make it short, clean and meaningful. only response raw message.`,
1818
},
1919
}
2020

@@ -63,15 +63,17 @@ func main() {
6363

6464
commitMessage := ""
6565
// loop until the commit message is generated
66-
for {
67-
ctx, _ := context.WithTimeout(context.Background(), time.Second*10)
68-
messages = append(messages, &Message{
69-
Role: "user",
70-
Content: diff,
71-
})
66+
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
67+
defer cancel()
68+
69+
messages = append(messages, &Message{
70+
Role: "user",
71+
Content: diff,
72+
})
7273

73-
// generate commit message
74+
for {
7475
printNormal("Assistant: " + generateLoadingMessage())
76+
7577
commitMessage, err = client.ChatComplete(ctx, messages)
7678
if err != nil {
7779
if explain, explainErr := explainError(context.Background(), client, err); explainErr == nil {
@@ -84,7 +86,7 @@ func main() {
8486
}
8587

8688
if commitMessage == "" {
87-
printNormal("Assistant: I don't know what to say about this diff, please give me a hint")
89+
printNormal("Assistant: I don't know what to say about this diff, please give me a hint.")
8890
} else {
8991
printNormal("Assistant: " + commitMessage)
9092
messages = append(messages, &Message{
@@ -94,39 +96,24 @@ func main() {
9496
}
9597

9698
// Loop until the user response
97-
userRequest := ""
98-
for {
99-
fmt.Println("Assistant: " + generateInteractiveMessage())
100-
fmt.Print("You: ")
101-
reader := bufio.NewReader(os.Stdin)
102-
userRequest, err = reader.ReadString('\n')
103-
if err != nil {
104-
if explain, explainErr := explainError(context.Background(), client, err); explainErr == nil {
105-
printError(explain)
106-
os.Exit(1)
107-
}
108-
109-
printError(err.Error())
99+
userResponse, err := askForUserResponse()
100+
if err != nil {
101+
if explain, explainErr := explainError(ctx, client, err); explainErr == nil {
102+
printError(explain)
110103
os.Exit(1)
111104
}
112105

113-
userRequest = strings.TrimSpace(userRequest)
114-
115-
if userRequest == "" {
116-
printWarning("Assistant: Please enter your response, say yes if you want to use the message or press Ctrl+C to exit")
117-
continue
118-
}
119-
120-
break
106+
printError(err.Error())
107+
os.Exit(1)
121108
}
122109

123-
if isAgree := IsAgree(client, userRequest); isAgree {
110+
if isAgree := IsAgree(client, userResponse); isAgree {
124111
break
125112
}
126113

127114
messages = append(messages, &Message{
128115
Role: "user",
129-
Content: userRequest,
116+
Content: userResponse,
130117
})
131118
}
132119

@@ -141,6 +128,26 @@ func main() {
141128
printSuccess("Assistant: Commit successfully with message: " + commitMessage)
142129
}
143130

131+
func askForUserResponse() (string, error) {
132+
fmt.Println("Assistant: " + generateInteractiveMessage())
133+
fmt.Print("You: ")
134+
135+
reader := bufio.NewReader(os.Stdin)
136+
userResponse, err := reader.ReadString('\n')
137+
if err != nil {
138+
return "", err
139+
}
140+
141+
userResponse = strings.TrimSpace(userResponse)
142+
143+
if userResponse == "" {
144+
printWarning("Assistant: Please enter your response, say yes if you want to use the message or press Ctrl+C to exit")
145+
return askForUserResponse()
146+
}
147+
148+
return userResponse, nil
149+
}
150+
144151
func joinPrefix(prefix string, message string) string {
145152

146153
if prefix == "" {
@@ -186,26 +193,24 @@ func askForAutoStage(apiClient *GptClient) bool {
186193
return IsAgree(apiClient, userRequest)
187194
}
188195

196+
// rewrite func askForPrefix use recursion
189197
func askForPrefix() string {
190-
prefix := ""
191-
var err error
192-
for {
193-
fmt.Println("Assistant: Please enter the commit prefix, press enter to skip")
194-
fmt.Print("You: ")
195-
reader := bufio.NewReader(os.Stdin)
196-
prefix, err = reader.ReadString('\n')
197-
if err != nil {
198-
printError("failed to read user input: " + err.Error())
199-
os.Exit(1)
200-
}
198+
fmt.Println("Assistant: Please enter the commit prefix, press enter to skip")
199+
fmt.Print("You: ")
200+
reader := bufio.NewReader(os.Stdin)
201+
prefix, err := reader.ReadString('\n')
202+
if err != nil {
203+
printError("failed to read user input: " + err.Error())
204+
os.Exit(1)
205+
}
201206

202-
prefix = strings.TrimSpace(prefix)
203-
break
207+
prefix = strings.TrimSpace(prefix)
208+
if prefix == "" {
209+
return askForPrefix()
204210
}
205211

206212
return prefix
207213
}
208-
209214
func explainError(ctx context.Context, apiClient *GptClient, userError error) (string, error) {
210215
response, err := apiClient.ChatComplete(ctx, []*Message{
211216
{

0 commit comments

Comments
 (0)