Skip to content

Commit cbd5a5d

Browse files
fixes
1 parent 58ed542 commit cbd5a5d

File tree

5 files changed

+1010
-1004
lines changed

5 files changed

+1010
-1004
lines changed

pkg/git/GitBaseManager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ func (impl *GitManagerBaseImpl) LogMergeBase(gitCtx GitContext, rootDir, from st
134134
if err != nil {
135135
return nil, err
136136
}
137-
commits, err := ProcessGitLogOutput(output)
137+
commits, err := ProcessGitLogOutputForAnalytics(output)
138138
if err != nil {
139139
impl.logger.Errorw("error in parsing log output", "err", err, "output", output)
140140
return nil, err
@@ -280,7 +280,7 @@ func (impl *GitManagerBaseImpl) FetchDiffStatBetweenCommits(gitCtx GitContext, o
280280
}
281281

282282
func (impl *GitManagerBaseImpl) CreateCmdWithContext(ctx GitContext, name string, arg ...string) (*exec.Cmd, context.CancelFunc) {
283-
newCtx := ctx.Context
283+
newCtx := context.Background()
284284
cancel := func() {}
285285

286286
//TODO: how to make it generic, currently works because the

pkg/git/GitCliManager.go

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import (
66
"gopkg.in/src-d/go-billy.v4/osfs"
77
"os"
88
"path/filepath"
9-
"regexp"
109
"strconv"
10+
"strings"
1111
)
1212

1313
type GitCliManager interface {
@@ -152,27 +152,27 @@ func (impl *GitCliManagerImpl) GitShow(gitCtx GitContext, rootDir string, hash s
152152
return commits[0], nil
153153
}
154154

155+
func (impl *GitCliManagerImpl) GetCommitStats(gitCtx GitContext, commit GitCommit) (FileStats, error) {
156+
gitCommit := commit.GetCommit()
157+
fileStat, errorMsg, err := impl.FetchDiffStatBetweenCommits(gitCtx, gitCommit.Commit, "", gitCommit.CheckoutPath)
158+
if err != nil {
159+
impl.logger.Errorw("error in fetching fileStat of commit: ", gitCommit.Commit, "checkoutPath", gitCommit.CheckoutPath, "errorMsg", errorMsg, "err", err)
160+
return nil, err
161+
}
162+
return getFileStat(fileStat)
163+
}
164+
155165
func (impl *GitCliManagerImpl) processGitLogOutput(out string, rootDir string) ([]GitCommit, error) {
156166

167+
gitCommits := make([]GitCommit, 0)
157168
if len(out) == 0 {
158-
return make([]GitCommit, 0), nil
169+
return gitCommits, nil
159170
}
160-
161-
logOut := strconv.Quote(out)
162-
163-
m1 := regexp.MustCompile("devtron_delimiter")
164-
logOut = m1.ReplaceAllString(logOut, `"`)
165-
166-
logOut = logOut[:len(logOut)-1] // Remove the last ","
167-
logOut = fmt.Sprintf("[%s]", logOut) // Add []
168-
169-
var gitCommitFormattedList []GitCommitFormat
170-
err := json.Unmarshal([]byte(logOut), &gitCommitFormattedList)
171+
gitCommitFormattedList, err := parseFormattedLogOutput(out)
171172
if err != nil {
172-
return nil, err
173+
return gitCommits, err
173174
}
174175

175-
gitCommits := make([]GitCommit, 0)
176176
for _, formattedCommit := range gitCommitFormattedList {
177177

178178
cm := GitCommitBase{
@@ -189,12 +189,23 @@ func (impl *GitCliManagerImpl) processGitLogOutput(out string, rootDir string) (
189189
return gitCommits, nil
190190
}
191191

192-
func (impl *GitCliManagerImpl) GetCommitStats(gitCtx GitContext, commit GitCommit) (FileStats, error) {
193-
gitCommit := commit.GetCommit()
194-
fileStat, errorMsg, err := impl.FetchDiffStatBetweenCommits(gitCtx, gitCommit.Commit, "", gitCommit.CheckoutPath)
192+
func parseFormattedLogOutput(out string) ([]GitCommitFormat, error) {
193+
//remove the new line character which is after each terminal comma
194+
out = strings.ReplaceAll(out, "},\n", "},")
195+
196+
// to escape the special characters like quotes and newline characters in the commit data
197+
logOut := strconv.Quote(out)
198+
199+
//replace the delimiter with quotes to make it parsable json
200+
logOut = strings.ReplaceAll(logOut, "devtron_delimiter", `"`)
201+
202+
logOut = logOut[1 : len(logOut)-2] // trim surround characters (surrounding quotes and trailing com,a)
203+
logOut = fmt.Sprintf("[%s]", logOut) // Add []
204+
205+
var gitCommitFormattedList []GitCommitFormat
206+
err := json.Unmarshal([]byte(logOut), &gitCommitFormattedList)
195207
if err != nil {
196-
impl.logger.Errorw("error in fetching fileStat of commit: ", gitCommit.Commit, "checkoutPath", gitCommit.CheckoutPath, "errorMsg", errorMsg, "err", err)
197208
return nil, err
198209
}
199-
return getFileStat(fileStat)
200-
}
210+
return gitCommitFormattedList, nil
211+
}

pkg/git/GitFormatter.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package git
33
import "time"
44

55
// var GITFORMAT = `--pretty=format:{"commit":"%H","parent":"%P","refs":"%D","subject":"%s","body":"%b","author":{"name":"%aN","email":"%aE","date":"%ad"},"commiter":{"name":"%cN","email":"%cE","date":"%cd"}},`
6-
var GITFORMAT = `--pretty=format:{devtron_delimitercommitdevtron_delimiter:devtron_delimiter%Hdevtron_delimiter,devtron_delimiterparentdevtron_delimiter:devtron_delimiter%Pdevtron_delimiter,devtron_delimiterrefsdevtron_delimiter:devtron_delimiter%Ddevtron_delimiter,devtron_delimitersubjectdevtron_delimiter:devtron_delimiter%sdevtron_delimiter,devtron_delimiterbodydevtron_delimiter:devtron_delimiter%bdevtron_delimiter,devtron_delimiterauthordevtron_delimiter:{devtron_delimiternamedevtron_delimiter:devtron_delimiter%aNdevtron_delimiter,devtron_delimiteremaildevtron_delimiter:devtron_delimiter%aEdevtron_delimiter,devtron_delimiterdatedevtron_delimiter:devtron_delimiter%addevtron_delimiter},devtron_delimitercommiterdevtron_delimiter:{devtron_delimiternamedevtron_delimiter:devtron_delimiter%cNdevtron_delimiter,devtron_delimiteremaildevtron_delimiter:devtron_delimiter%cEdevtron_delimiter,devtron_delimiterdatedevtron_delimiter:devtron_delimiter%cddevtron_delimiter}},`
6+
var GITFORMAT = "--pretty=format:{devtron_delimitercommitdevtron_delimiter:devtron_delimiter%Hdevtron_delimiter,devtron_delimiterparentdevtron_delimiter:devtron_delimiter%Pdevtron_delimiter,devtron_delimiterrefsdevtron_delimiter:devtron_delimiter%Ddevtron_delimiter,devtron_delimitersubjectdevtron_delimiter:devtron_delimiter%sdevtron_delimiter,devtron_delimiterbodydevtron_delimiter:devtron_delimiter%bdevtron_delimiter,devtron_delimiterauthordevtron_delimiter:{devtron_delimiternamedevtron_delimiter:devtron_delimiter%aNdevtron_delimiter,devtron_delimiteremaildevtron_delimiter:devtron_delimiter%aEdevtron_delimiter,devtron_delimiterdatedevtron_delimiter:devtron_delimiter%addevtron_delimiter},devtron_delimitercommiterdevtron_delimiter:{devtron_delimiternamedevtron_delimiter:devtron_delimiter%cNdevtron_delimiter,devtron_delimiteremaildevtron_delimiter:devtron_delimiter%cEdevtron_delimiter,devtron_delimiterdatedevtron_delimiter:devtron_delimiter%cddevtron_delimiter}},"
77

88
type GitPerson struct {
99
Name string `json:"name"`

pkg/git/RepositoryManagerAnalytics.go

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package git
22

33
import (
44
"context"
5-
"encoding/json"
65
"fmt"
76
"github.com/devtron-labs/git-sensor/util"
87
"gopkg.in/src-d/go-git.v4"
@@ -303,19 +302,14 @@ func (impl RepositoryManagerAnalyticsImpl) getPatchObject(gitCtx GitContext, rep
303302
return patch, nil
304303
}
305304

306-
func ProcessGitLogOutput(out string) ([]*Commit, error) {
305+
func ProcessGitLogOutputForAnalytics(out string) ([]*Commit, error) {
307306
gitCommits := make([]*Commit, 0)
308307
if len(out) == 0 {
309308
return gitCommits, nil
310309
}
311-
logOut := out
312-
logOut = logOut[:len(logOut)-1] // Remove the last ","
313-
logOut = fmt.Sprintf("[%s]", logOut) // Add []
314-
315-
var gitCommitFormattedList []GitCommitFormat
316-
err := json.Unmarshal([]byte(logOut), &gitCommitFormattedList)
310+
gitCommitFormattedList, err := parseFormattedLogOutput(out)
317311
if err != nil {
318-
return nil, err
312+
return gitCommits, err
319313
}
320314

321315
for _, formattedCommit := range gitCommitFormattedList {

0 commit comments

Comments
 (0)