This is an automated email from the ASF dual-hosted git repository.
abeizn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git
The following commit(s) were added to refs/heads/main by this push:
new e0a35fe90 fix: gitextractor reporting object not found (#7295)
e0a35fe90 is described below
commit e0a35fe90e824d6be53a499d4a9b2a5388799ebc
Author: Klesh Wong <[email protected]>
AuthorDate: Mon Apr 8 15:20:28 2024 +0800
fix: gitextractor reporting object not found (#7295)
---
backend/plugins/gitextractor/parser/repo_gogit.go | 4 ++++
backend/plugins/gitextractor/parser/repo_libgit2.go | 6 +++++-
backend/plugins/gitextractor/tasks/clone.go | 4 ++--
backend/plugins/gitextractor/tasks/git_repo_collector.go | 10 ++++------
4 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/backend/plugins/gitextractor/parser/repo_gogit.go
b/backend/plugins/gitextractor/parser/repo_gogit.go
index 4dd44ce79..f93655d86 100644
--- a/backend/plugins/gitextractor/parser/repo_gogit.go
+++ b/backend/plugins/gitextractor/parser/repo_gogit.go
@@ -372,6 +372,10 @@ func (r *GogitRepoCollector) storeParentCommits(commitSha
string, commit *object
for i := 0; i < commit.NumParents(); i++ {
parent, err := commit.Parent(i)
if err != nil {
+ // parent commit might not exist when repo is shallow
cloned (tradeoff of supporting timeAfter paramenter)
+ if err.Error() == "object not found" {
+ continue
+ }
return err
}
if parent != nil {
diff --git a/backend/plugins/gitextractor/parser/repo_libgit2.go
b/backend/plugins/gitextractor/parser/repo_libgit2.go
index 1bf82fb6d..f4371204f 100644
--- a/backend/plugins/gitextractor/parser/repo_libgit2.go
+++ b/backend/plugins/gitextractor/parser/repo_libgit2.go
@@ -85,7 +85,11 @@ func (r *Libgit2RepoCollector) CollectAll(subtaskCtx
plugin.SubTaskContext) erro
if err != nil {
return err
}
- return r.CollectDiffLine(subtaskCtx)
+ opt := subtaskCtx.GetData().(*GitExtractorTaskData).Options
+ if !*opt.SkipCommitStat {
+ return r.CollectDiffLine(subtaskCtx)
+ }
+ return nil
}
// Close resources
diff --git a/backend/plugins/gitextractor/tasks/clone.go
b/backend/plugins/gitextractor/tasks/clone.go
index 530e4b8d7..40e750724 100644
--- a/backend/plugins/gitextractor/tasks/clone.go
+++ b/backend/plugins/gitextractor/tasks/clone.go
@@ -62,9 +62,9 @@ func CloneGitRepo(subTaskCtx plugin.SubTaskContext)
errors.Error {
// We have done comparison experiments for git2go and go-git, and the
results show that git2go has better performance.
var repoCollector parser.RepoCollector
if *taskData.Options.UseGoGit {
- repoCollector, err = parser.NewLibgit2RepoCollector(localDir,
op.RepoId, storage, logger)
- } else {
repoCollector, err = parser.NewGogitRepoCollector(localDir,
op.RepoId, storage, logger)
+ } else {
+ repoCollector, err = parser.NewLibgit2RepoCollector(localDir,
op.RepoId, storage, logger)
}
if err != nil {
return err
diff --git a/backend/plugins/gitextractor/tasks/git_repo_collector.go
b/backend/plugins/gitextractor/tasks/git_repo_collector.go
index c8a287b36..02571cf09 100644
--- a/backend/plugins/gitextractor/tasks/git_repo_collector.go
+++ b/backend/plugins/gitextractor/tasks/git_repo_collector.go
@@ -61,14 +61,12 @@ func CollectGitTags(subTaskCtx plugin.SubTaskContext)
errors.Error {
func CollectGitDiffLines(subTaskCtx plugin.SubTaskContext) errors.Error {
repo := getGitRepo(subTaskCtx)
- if count, err := repo.CountTags(subTaskCtx.GetContext()); err != nil {
- subTaskCtx.GetLogger().Error(err, "unable to get line content")
+ opt := subTaskCtx.GetData().(*parser.GitExtractorTaskData).Options
+ if !*opt.SkipCommitStat {
subTaskCtx.SetProgress(0, -1)
- return errors.Convert(err)
- } else {
- subTaskCtx.SetProgress(0, count)
+ return errors.Convert(repo.CollectDiffLine(subTaskCtx))
}
- return errors.Convert(repo.CollectDiffLine(subTaskCtx))
+ return nil
}
func getGitRepo(subTaskCtx plugin.SubTaskContext) parser.RepoCollector {