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 {

Reply via email to