Skip to content

Commit 4c70aca

Browse files
committed
Added commit hook message to the error description
1 parent 915d756 commit 4c70aca

File tree

4 files changed

+47
-7
lines changed

4 files changed

+47
-7
lines changed
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package com.jetpackduba.gitnuro.exceptions
22

3-
abstract class GitnuroException(msg: String, cause: Exception? = null) : Exception(msg, cause)
3+
abstract class GitnuroException(message: String, cause: Exception? = null) : Exception(message, cause)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package com.jetpackduba.gitnuro.exceptions
2+
3+
class HookException(message: String): GitnuroException(message)

src/main/kotlin/com/jetpackduba/gitnuro/git/workspace/DoCommitUseCase.kt

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
package com.jetpackduba.gitnuro.git.workspace
22

3+
import com.jetpackduba.gitnuro.exceptions.HookException
34
import com.jetpackduba.gitnuro.extensions.isMerging
45
import com.jetpackduba.gitnuro.git.AppGpgSigner
56
import com.jetpackduba.gitnuro.git.author.LoadAuthorUseCase
67
import com.jetpackduba.gitnuro.git.config.LoadSignOffConfigUseCase
78
import com.jetpackduba.gitnuro.git.config.LocalConfigConstants
89
import com.jetpackduba.gitnuro.git.repository.GetRepositoryStateUseCase
10+
import com.jetpackduba.gitnuro.logging.printLog
11+
import com.jetpackduba.gitnuro.utils.use
912
import kotlinx.coroutines.Dispatchers
1013
import kotlinx.coroutines.withContext
1114
import org.eclipse.jgit.api.Git
15+
import org.eclipse.jgit.api.errors.AbortedByHookException
1216
import org.eclipse.jgit.lib.PersonIdent
1317
import org.eclipse.jgit.revwalk.RevCommit
18+
import java.io.ByteArrayOutputStream
19+
import java.io.PrintStream
1420
import javax.inject.Inject
1521

22+
private const val TAG = "DoCommitUseCase"
23+
1624
class 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
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.jetpackduba.gitnuro.utils
2+
3+
import java.io.Closeable
4+
5+
fun <T: Closeable, S: Closeable, R> use(closable1: T, closable2: S, callback: () -> R): R {
6+
return closable1.use {
7+
closable2.use {
8+
callback()
9+
}
10+
}
11+
}

0 commit comments

Comments
 (0)