11package  com.jetpackduba.gitnuro.git.workspace 
22
3+ import  com.jetpackduba.gitnuro.exceptions.HookException 
34import  com.jetpackduba.gitnuro.extensions.isMerging 
45import  com.jetpackduba.gitnuro.git.AppGpgSigner 
56import  com.jetpackduba.gitnuro.git.author.LoadAuthorUseCase 
67import  com.jetpackduba.gitnuro.git.config.LoadSignOffConfigUseCase 
78import  com.jetpackduba.gitnuro.git.config.LocalConfigConstants 
89import  com.jetpackduba.gitnuro.git.repository.GetRepositoryStateUseCase 
10+ import  com.jetpackduba.gitnuro.logging.printLog 
11+ import  com.jetpackduba.gitnuro.utils.use 
912import  kotlinx.coroutines.Dispatchers 
1013import  kotlinx.coroutines.withContext 
1114import  org.eclipse.jgit.api.Git 
15+ import  org.eclipse.jgit.api.errors.AbortedByHookException 
1216import  org.eclipse.jgit.lib.PersonIdent 
1317import  org.eclipse.jgit.revwalk.RevCommit 
18+ import  java.io.ByteArrayOutputStream 
19+ import  java.io.PrintStream 
1420import  javax.inject.Inject 
1521
22+ private  const  val  TAG  =  " DoCommitUseCase" 
23+ 
1624class  DoCommitUseCase  @Inject constructor(
1725    private  val  loadSignOffConfigUseCase :  LoadSignOffConfigUseCase ,
1826    private  val  loadAuthorUseCase :  LoadAuthorUseCase ,
@@ -41,12 +49,30 @@ class DoCommitUseCase @Inject constructor(
4149
4250        val  state =  getRepositoryStateUseCase(git)
4351        val  isMerging =  state.isMerging
52+         val  output =  ByteArrayOutputStream ()
53+         val  printStream =  PrintStream (output, true , Charsets .UTF_8 )
54+ 
55+         try  {
56+             use(output, printStream) {
57+                 git.commit()
58+                     .setMessage(finalMessage)
59+                     .setAllowEmpty(amend ||  isMerging) //  Only allow empty commits when amending
60+                     .setAmend(amend)
61+                     .setHookErrorStream(printStream)
62+                     .setHookOutputStream(printStream)
63+                     .setAuthor(author)
64+                     .call()
65+             }
66+         } catch  (ex:  Exception ) {
67+             if  (ex is  AbortedByHookException ) {
68+                 val  out  =  output.toString(Charsets .UTF_8 )
69+                 printLog(TAG , out )
70+ 
71+                 throw  HookException (out )
72+             }
73+ 
4474
45-         git.commit()
46-             .setMessage(finalMessage)
47-             .setAllowEmpty(amend ||  isMerging) //  Only allow empty commits when amending
48-             .setAmend(amend)
49-             .setAuthor(author)
50-             .call()
75+             throw  ex
76+         }
5177    }
5278}
0 commit comments