@@ -14,7 +14,7 @@ import (
1414var 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+
144151func 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
189197func 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-
209214func explainError (ctx context.Context , apiClient * GptClient , userError error ) (string , error ) {
210215 response , err := apiClient .ChatComplete (ctx , []* Message {
211216 {
0 commit comments