diff options
author | Patrick Steinhardt <psteinhardt@gitlab.com> | 2022-08-05 10:37:28 +0300 |
---|---|---|
committer | Patrick Steinhardt <psteinhardt@gitlab.com> | 2022-08-05 11:09:31 +0300 |
commit | c1c10144cffd232130df0e2a24e92b8c8705773f (patch) | |
tree | 2835e6c0b61174f6ec9f1a373004a31f4be63821 | |
parent | 1a81f65d298cefd4f813946f5927f360fb5d0d87 (diff) |
lstree: Inject the object hash used to parse tree entries
Inject the object hash used to parse tree entries so that the tree entry
parser can easily support parsing both SHA1 and SHA256 tree entries. For
the time being all callers just inject SHA1. They will be converted over
time to inject the correct value.
-rw-r--r-- | cmd/gitaly-git2go/submodule_test.go | 2 | ||||
-rw-r--r-- | internal/git/gitpipe/ls_tree.go | 2 | ||||
-rw-r--r-- | internal/git/lstree/list_entries.go | 2 | ||||
-rw-r--r-- | internal/git/lstree/parser.go | 10 | ||||
-rw-r--r-- | internal/git/lstree/parser_test.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/commit/list_files.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/commit/list_last_commits_for_tree.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/operations/submodules_test.go | 2 | ||||
-rw-r--r-- | internal/gitaly/service/repository/license.go | 2 |
9 files changed, 14 insertions, 12 deletions
diff --git a/cmd/gitaly-git2go/submodule_test.go b/cmd/gitaly-git2go/submodule_test.go index 7e6c2a5bd..c05bc0af5 100644 --- a/cmd/gitaly-git2go/submodule_test.go +++ b/cmd/gitaly-git2go/submodule_test.go @@ -119,7 +119,7 @@ func TestSubmodule(t *testing.T) { fmt.Sprintf("%s^{tree}:", response.CommitID), tc.command.Submodule, ) - parser := lstree.NewParser(bytes.NewReader(entry)) + parser := lstree.NewParser(bytes.NewReader(entry), git.ObjectHashSHA1) parsedEntry, err := parser.NextEntry() require.NoError(t, err) require.Equal(t, tc.command.Submodule, parsedEntry.Path) diff --git a/internal/git/gitpipe/ls_tree.go b/internal/git/gitpipe/ls_tree.go index 10c6237c1..5d2ad775f 100644 --- a/internal/git/gitpipe/ls_tree.go +++ b/internal/git/gitpipe/ls_tree.go @@ -80,7 +80,7 @@ func LsTree( return } - parser := lstree.NewParser(cmd) + parser := lstree.NewParser(cmd, git.ObjectHashSHA1) for { entry, err := parser.NextEntry() if err != nil { diff --git a/internal/git/lstree/list_entries.go b/internal/git/lstree/list_entries.go index e68a5055a..28d38a0ad 100644 --- a/internal/git/lstree/list_entries.go +++ b/internal/git/lstree/list_entries.go @@ -60,7 +60,7 @@ func ListEntries( return nil, fmt.Errorf("spawning git-ls-tree: %w", err) } - parser := NewParser(cmd) + parser := NewParser(cmd, git.ObjectHashSHA1) var entries []*Entry for { entry, err := parser.NextEntry() diff --git a/internal/git/lstree/parser.go b/internal/git/lstree/parser.go index 2a35df472..7c1a58adb 100644 --- a/internal/git/lstree/parser.go +++ b/internal/git/lstree/parser.go @@ -14,13 +14,15 @@ var ErrParse = errors.New("failed to parse git ls-tree response") // Parser holds the necessary state for parsing the ls-tree output type Parser struct { - reader *bufio.Reader + reader *bufio.Reader + objectHash git.ObjectHash } // NewParser returns a new Parser -func NewParser(src io.Reader) *Parser { +func NewParser(src io.Reader, objectHash git.ObjectHash) *Parser { return &Parser{ - reader: bufio.NewReader(src), + reader: bufio.NewReader(src), + objectHash: objectHash, } } @@ -61,7 +63,7 @@ func (p *Parser) NextEntry() (*Entry, error) { return nil, err } - objectID, err := git.ObjectHashSHA1.FromHex(string(treeEntryID)) + objectID, err := p.objectHash.FromHex(string(treeEntryID)) if err != nil { return nil, err } diff --git a/internal/git/lstree/parser_test.go b/internal/git/lstree/parser_test.go index 3eb9a9111..8d8b94c16 100644 --- a/internal/git/lstree/parser_test.go +++ b/internal/git/lstree/parser_test.go @@ -69,7 +69,7 @@ func TestParser(t *testing.T) { t.Run(tc.desc, func(t *testing.T) { treeData := gittest.Exec(t, cfg, "-C", repoPath, "ls-tree", "-z", tc.treeID.String()) - parser := NewParser(bytes.NewReader(treeData)) + parser := NewParser(bytes.NewReader(treeData), gittest.DefaultObjectHash) parsedEntries := Entries{} for { entry, err := parser.NextEntry() diff --git a/internal/gitaly/service/commit/list_files.go b/internal/gitaly/service/commit/list_files.go index e252688cd..9a1da2197 100644 --- a/internal/gitaly/service/commit/list_files.go +++ b/internal/gitaly/service/commit/list_files.go @@ -81,7 +81,7 @@ func (s *server) listFiles(repo git.RepositoryExecutor, revision string, stream sender := chunk.New(&listFilesSender{stream: stream}) - for parser := lstree.NewParser(cmd); ; { + for parser := lstree.NewParser(cmd, git.ObjectHashSHA1); ; { entry, err := parser.NextEntry() if err == io.EOF { break diff --git a/internal/gitaly/service/commit/list_last_commits_for_tree.go b/internal/gitaly/service/commit/list_last_commits_for_tree.go index 4a7300de1..7e1c35b83 100644 --- a/internal/gitaly/service/commit/list_last_commits_for_tree.go +++ b/internal/gitaly/service/commit/list_last_commits_for_tree.go @@ -123,7 +123,7 @@ func (s *server) newLSTreeParser(in *gitalypb.ListLastCommitsForTreeRequest, str return nil, nil, err } - return cmd, lstree.NewParser(cmd), nil + return cmd, lstree.NewParser(cmd, git.ObjectHashSHA1), nil } func sendCommitsForTree(batch []*gitalypb.ListLastCommitsForTreeResponse_CommitForTree, stream gitalypb.CommitService_ListLastCommitsForTreeServer) error { diff --git a/internal/gitaly/service/operations/submodules_test.go b/internal/gitaly/service/operations/submodules_test.go index 442cc2964..43ab9856b 100644 --- a/internal/gitaly/service/operations/submodules_test.go +++ b/internal/gitaly/service/operations/submodules_test.go @@ -93,7 +93,7 @@ func TestSuccessfulUserUpdateSubmoduleRequest(t *testing.T) { require.Equal(t, commitMessage, commit.Subject) entry := gittest.Exec(t, cfg, "-C", repoPath, "ls-tree", "-z", fmt.Sprintf("%s^{tree}:", response.BranchUpdate.CommitId), testCase.submodule) - parser := lstree.NewParser(bytes.NewReader(entry)) + parser := lstree.NewParser(bytes.NewReader(entry), git.ObjectHashSHA1) parsedEntry, err := parser.NextEntry() require.NoError(t, err) require.Equal(t, testCase.submodule, parsedEntry.Path) diff --git a/internal/gitaly/service/repository/license.go b/internal/gitaly/service/repository/license.go index 55b28c4b0..8fc277ca6 100644 --- a/internal/gitaly/service/repository/license.go +++ b/internal/gitaly/service/repository/license.go @@ -123,7 +123,7 @@ func (f *gitFiler) ReadDir(string) ([]filer.File, error) { return nil, err } - tree := lstree.NewParser(cmd) + tree := lstree.NewParser(cmd, git.ObjectHashSHA1) var files []filer.File for { |