diff options
author | David Kim <dkim@gitlab.com> | 2023-11-01 06:01:00 +0300 |
---|---|---|
committer | David Kim <dkim@gitlab.com> | 2023-11-01 06:42:52 +0300 |
commit | 86fc2a51f79a1a6f6d22101137b81f27daf8ed02 (patch) | |
tree | b2fb133187c989fe707f9bab0e1b7a25e164ddc8 | |
parent | c4ac18ed82f0a2043a5420d050d9145c9778c600 (diff) |
Add CheckAttrGenerated to pass in CheckAttr instead
-rw-r--r-- | internal/gitaly/linguist/linguist.go | 40 | ||||
-rw-r--r-- | internal/gitaly/linguist/linguist_test.go | 12 | ||||
-rw-r--r-- | internal/gitaly/service/commit/languages.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/diff/commit_diff.go | 5 |
4 files changed, 27 insertions, 32 deletions
diff --git a/internal/gitaly/linguist/linguist.go b/internal/gitaly/linguist/linguist.go index cb20d778b..cb09fa24d 100644 --- a/internal/gitaly/linguist/linguist.go +++ b/internal/gitaly/linguist/linguist.go @@ -21,41 +21,23 @@ type ByteCountPerLanguage map[string]uint64 // Instance is a holder of the defined in the system language settings. type Instance struct { + ctx context.Context logger log.Logger catfileCache catfile.Cache repo *localrepo.Repo - ctx context.Context - checkAttrCmd *gitattributes.CheckAttrCmd } // New creates a new instance that can be used to calculate language stats for // the given repo. -func New(logger log.Logger, catfileCache catfile.Cache, repo *localrepo.Repo) *Instance { +func New(ctx context.Context, logger log.Logger, catfileCache catfile.Cache, repo *localrepo.Repo) *Instance { return &Instance{ + ctx: ctx, logger: logger, catfileCache: catfileCache, repo: repo, } } -// NewWithGitAttributes creates a new instance with CheckAttrCmd -func NewWithGitAttributes(ctx context.Context, logger log.Logger, catfileCache catfile.Cache, repo *localrepo.Repo, revision git.Revision) (*Instance, func(), error) { - attrs := []string{linguistGenerated} - - checkAttr, finishAttr, err := gitattributes.CheckAttr(ctx, repo, revision, attrs) - if err != nil { - return nil, nil, err - } - - return &Instance{ - logger: logger, - catfileCache: catfileCache, - repo: repo, - ctx: ctx, - checkAttrCmd: checkAttr, - }, finishAttr, nil -} - // Color returns the color Linguist has assigned to language. func Color(language string) string { if color := enry.GetColor(language); color != "#cccccc" { @@ -67,8 +49,8 @@ func Color(language string) string { } // IsGenerated returns true if the given file is considered to be generated -func (inst *Instance) IsGenerated(filename string, oid git.ObjectID) (bool, error) { - fileInstance, err := newFileInstance(filename, inst.checkAttrCmd) +func (inst *Instance) IsGenerated(checkAttrCmd *gitattributes.CheckAttrCmd, filename string, oid git.ObjectID) (bool, error) { + fileInstance, err := newFileInstance(filename, checkAttrCmd) if err != nil { return false, fmt.Errorf("new file instance: %w", err) } @@ -90,6 +72,18 @@ func (inst *Instance) IsGenerated(filename string, oid git.ObjectID) (bool, erro return enry.IsGenerated(filename, content), nil } +// CheckAttrGenerated returns a CheckAttr that reads linguist-generated override +func (inst *Instance) CheckAttrGenerated(revision git.Revision) (*gitattributes.CheckAttrCmd, func(), error) { + attrs := []string{linguistGenerated} + + checkAttr, finishAttr, err := gitattributes.CheckAttr(inst.ctx, inst.repo, revision, attrs) + if err != nil { + return nil, nil, err + } + + return checkAttr, finishAttr, nil +} + // readPartialObject reads given object upto the limit and discard the rest func (inst *Instance) readPartialObject(oid git.ObjectID, limit int64) ([]byte, error) { objectReader, cancel, err := inst.catfileCache.ObjectReader(inst.ctx, inst.repo) diff --git a/internal/gitaly/linguist/linguist_test.go b/internal/gitaly/linguist/linguist_test.go index d3b984ffe..085306a6c 100644 --- a/internal/gitaly/linguist/linguist_test.go +++ b/internal/gitaly/linguist/linguist_test.go @@ -366,7 +366,7 @@ func TestInstance_Stats(t *testing.T) { // We simply run the linguist once before so that it can already // write the cache. - _, err := New(testhelper.NewLogger(t), catfileCache, repo).Stats(ctx, commitID) + _, err := New(ctx, testhelper.NewLogger(t), catfileCache, repo).Stats(ctx, commitID) require.NoError(t, err) require.FileExists(t, filepath.Join(repoPath, languageStatsFilename)) @@ -397,7 +397,7 @@ func TestInstance_Stats(t *testing.T) { )) repo := localrepo.NewTestRepo(t, cfg, repoProto) - _, err := New(testhelper.NewLogger(t), catfileCache, repo).Stats(ctx, commitID) + _, err := New(ctx, testhelper.NewLogger(t), catfileCache, repo).Stats(ctx, commitID) require.NoError(t, err) require.FileExists(t, filepath.Join(repoPath, languageStatsFilename)) @@ -485,7 +485,7 @@ func TestInstance_Stats(t *testing.T) { // Precreate the cache with the old commit. This ensures that // linguist knows to update the cache. - stats, err := New(testhelper.NewLogger(t), catfileCache, repo).Stats(ctx, oldCommitID) + stats, err := New(ctx, testhelper.NewLogger(t), catfileCache, repo).Stats(ctx, oldCommitID) require.NoError(t, err) require.FileExists(t, filepath.Join(repoPath, languageStatsFilename)) require.Equal(t, ByteCountPerLanguage{ @@ -524,7 +524,7 @@ func TestInstance_Stats(t *testing.T) { repoProto, repoPath, objectID := tc.setup(t) repo := localrepo.NewTestRepo(t, cfg, repoProto) - linguist := New(testhelper.NewLogger(t), catfileCache, repo) + linguist := New(ctx, testhelper.NewLogger(t), catfileCache, repo) stats, err := linguist.Stats(ctx, objectID) if tc.expectedErr == "" { require.NoError(t, err) @@ -568,7 +568,7 @@ func TestInstance_Stats_failureGitattributes(t *testing.T) { repo := localrepo.New(logger, locator, gitCmdFactory, catfileCache, repoProto) - linguist := New(logger, catfileCache, repo) + linguist := New(ctx, logger, catfileCache, repo) _, err := linguist.Stats(ctx, commitID) expectedErr := `linguist object iterator: ls-tree skip: new file instance: checking attribute:` @@ -609,7 +609,7 @@ func BenchmarkInstance_Stats(b *testing.B) { }) repo := localrepo.NewTestRepo(b, cfg, repoProto) - linguist := New(testhelper.NewLogger(b), catfileCache, repo) + linguist := New(ctx, testhelper.NewLogger(b), catfileCache, repo) var scratchStat ByteCountPerLanguage var incStats ByteCountPerLanguage diff --git a/internal/gitaly/service/commit/languages.go b/internal/gitaly/service/commit/languages.go index aa87a55f2..e2c2e48ef 100644 --- a/internal/gitaly/service/commit/languages.go +++ b/internal/gitaly/service/commit/languages.go @@ -49,7 +49,7 @@ func (s *server) CommitLanguages(ctx context.Context, req *gitalypb.CommitLangua return nil, structerr.NewInternal("looking up revision: %w", err) } - stats, err := linguist.New(s.logger, s.catfileCache, repo).Stats(ctx, git.ObjectID(commitID)) + stats, err := linguist.New(ctx, s.logger, s.catfileCache, repo).Stats(ctx, git.ObjectID(commitID)) if err != nil { return nil, structerr.NewInternal("language stats: %w", err) } diff --git a/internal/gitaly/service/diff/commit_diff.go b/internal/gitaly/service/diff/commit_diff.go index 23518ceec..5ac288b43 100644 --- a/internal/gitaly/service/diff/commit_diff.go +++ b/internal/gitaly/service/diff/commit_diff.go @@ -85,7 +85,8 @@ func (s *server) CommitDiff(in *gitalypb.CommitDiffRequest, stream gitalypb.Diff limits.SafeMaxLines = int(in.SafeMaxLines) limits.SafeMaxBytes = int(in.SafeMaxBytes) - linguistInstance, checkAttrFinish, err := linguist.NewWithGitAttributes(ctx, s.logger, s.catfileCache, repo, git.Revision(leftSha)) + linguistInstance := linguist.New(ctx, s.logger, s.catfileCache, repo) + checkAttrCmd, checkAttrFinish, err := linguistInstance.CheckAttrGenerated(git.Revision(leftSha)) if err != nil { return structerr.NewAborted("send: %w", err) } @@ -114,7 +115,7 @@ func (s *server) CommitDiff(in *gitalypb.CommitDiffRequest, stream gitalypb.Diff oid = git.ObjectID(diff.ToID) } - linguistGenerated, err := linguistInstance.IsGenerated(string(diff.FromPath), oid) + linguistGenerated, err := linguistInstance.IsGenerated(checkAttrCmd, string(diff.FromPath), oid) if err != nil { return structerr.NewAborted("send: %w", err) } |