1
1
package com.huayi.intellijplatform.gitstats.utils
2
2
3
3
import git4idea.config.GitExecutableManager
4
+ import git4idea.config.GitExecutableDetector
4
5
import java.util.concurrent.TimeUnit
5
6
import com.intellij.openapi.project.Project
6
7
@@ -29,7 +30,10 @@ data class CommitFilesStats(
29
30
class GitUtils (project : Project ) {
30
31
private val gitExecutablePath: String = GitExecutableManager .getInstance().getExecutable(project).exePath
31
32
private val basePath: String = project.basePath as String
33
+ private val gitBashExecutablePath: String? = GitExecutableDetector .getBashExecutablePath(gitExecutablePath)
32
34
35
+ // init {
36
+ // }
33
37
// companion object {
34
38
// fun getGitExecutablePath(project: Project): String {
35
39
// return GitExecutableManager.getInstance().getExecutable(project).exePath
@@ -40,12 +44,25 @@ class GitUtils(project: Project) {
40
44
startDate : String , endDate : String , timeoutAmount : Long = 60L, timeUnit : TimeUnit = TimeUnit .SECONDS
41
45
): Array <UserStats > {
42
46
val os = Utils .getOS()
43
- val command = listOf (
44
- if (os == " Windows" ) " cmd" else " /bin/sh" ,
45
- if (os == " Windows" ) " /c" else " -c" ,
46
- " $gitExecutablePath log --format=\" %aN\" | sort -u | while read name; do echo \" \$ name\" ; git log --author=\" \$ name\" --pretty=tformat: --since==\" $startDate \" --until=\" $endDate \" --numstat | awk '{ add += \$ 1; subs += \$ 2; file++ } END { printf \" added lines: %s, removed lines: %s, modified files: %s\\ n\" , add ? add : 0, subs ? subs : 0, file ? file : 0 }' -; done"
47
- )
48
- val process = Utils .runCommand(basePath, command, timeoutAmount, timeUnit)
47
+ val commands = mutableListOf<String >()
48
+ when {
49
+ os == " Windows" && gitBashExecutablePath?.isNotEmpty() ? : false -> {
50
+ commands + = gitBashExecutablePath!!
51
+ commands + = " -c"
52
+ commands + = " git log --format=\" %aN\" | sort -u | while read name; do echo \" \$ name\" ; git log --author=\\\" \$ name\\\" --pretty=tformat: --since=\\\" ${startDate} \\\" --until=\\\" ${endDate} \\\" --numstat | awk '{ add += \$ 1; subs += \$ 2; file++ } END { printf(\\\" added lines: %s, removed lines: %s, modified files: %s\\ n\\\" , add ? add : 0, subs ? subs : 0, file ? file : 0) }' -; done"
53
+ }
54
+ os == " Windows" && gitBashExecutablePath?.isEmpty() ? : false -> {
55
+ commands + = " powershell"
56
+ commands + = " /c"
57
+ // commands += "C:\\\"Program Files\"\\Git\\cmd\\git.exe log --format='%aN' | sort -u | % { $name=$_; Write-Output $name; git log --author=$name --pretty=tformat: --since='2023-05-15 00:00:00' --until='2023-05-21 23:59:59' --numstat | ? { $_ -match '\\d' } | % { $add += [int]$_.Split()[0]; $subs += [int]$_.Split()[1]; $files++ } ; Write-Output ( 'added lines: ' + $add + ', removed lines: ' + $subs + ', modified files: ' + $files ) }"
58
+ }
59
+ else -> {
60
+ commands + = " /bin/sh"
61
+ commands + = " -c"
62
+ commands + = " $gitExecutablePath log --format=\" %aN\" | sort -u | while read name; do echo \" \$ name\" ; git log --author=\" \$ name\" --pretty=\" tformat:\" --since=\" $startDate \" --until=\" $endDate \" --numstat | awk '{ add += \$ 1; subs += \$ 2; file++ } END { printf \" added lines: %s, removed lines: %s, modified files: %s\\ n\" , add ? add : 0, subs ? subs : 0, file ? file : 0 }' -; done"
63
+ }
64
+ }
65
+ val process = Utils .runCommand(basePath, commands, timeoutAmount, timeUnit)
49
66
val regex = Regex (" (.+)\\ n+added lines: (\\ d*), removed lines: (\\ d+), modified files: (\\ d+)" )
50
67
return regex.findAll(process!! .inputStream.bufferedReader().readText())
51
68
.map { result ->
0 commit comments