mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.4 KiB
81 lines
2.4 KiB
// Copyright 2024 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package git |
|
|
|
import ( |
|
"context" |
|
"io" |
|
"os" |
|
"path/filepath" |
|
|
|
"code.gitea.io/gitea/modules/git/gitcmd" |
|
"code.gitea.io/gitea/modules/util" |
|
) |
|
|
|
// catFileBatchLegacy implements the CatFileBatch interface using the "cat-file --batch" command and "cat-file --batch-check" command |
|
// for git version < 2.36 |
|
// to align with "--batch-command", it creates the two commands for querying object contents and object info separately |
|
// ref: https://git-scm.com/docs/git-cat-file#Documentation/git-cat-file.txt---batch |
|
type catFileBatchLegacy struct { |
|
ctx context.Context |
|
repoPath string |
|
batchContent *catFileBatchCommunicator |
|
batchCheck *catFileBatchCommunicator |
|
} |
|
|
|
var _ CatFileBatchCloser = (*catFileBatchLegacy)(nil) |
|
|
|
func newCatFileBatchLegacy(ctx context.Context, repoPath string) (*catFileBatchLegacy, error) { |
|
if _, err := os.Stat(repoPath); err != nil { |
|
return nil, util.NewNotExistErrorf("repo %q doesn't exist", filepath.Base(repoPath)) |
|
} |
|
return &catFileBatchLegacy{ctx: ctx, repoPath: repoPath}, nil |
|
} |
|
|
|
func (b *catFileBatchLegacy) getBatchContent() *catFileBatchCommunicator { |
|
if b.batchContent != nil { |
|
return b.batchContent |
|
} |
|
b.batchContent = newCatFileBatch(b.ctx, b.repoPath, gitcmd.NewCommand("cat-file", "--batch")) |
|
return b.batchContent |
|
} |
|
|
|
func (b *catFileBatchLegacy) getBatchCheck() *catFileBatchCommunicator { |
|
if b.batchCheck != nil { |
|
return b.batchCheck |
|
} |
|
b.batchCheck = newCatFileBatch(b.ctx, b.repoPath, gitcmd.NewCommand("cat-file", "--batch-check")) |
|
return b.batchCheck |
|
} |
|
|
|
func (b *catFileBatchLegacy) QueryContent(obj string) (*CatFileObject, BufferedReader, error) { |
|
_, err := io.WriteString(b.getBatchContent().writer, obj+"\n") |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
info, err := catFileBatchParseInfoLine(b.getBatchContent().reader) |
|
if err != nil { |
|
return nil, nil, err |
|
} |
|
return info, b.getBatchContent().reader, nil |
|
} |
|
|
|
func (b *catFileBatchLegacy) QueryInfo(obj string) (*CatFileObject, error) { |
|
_, err := io.WriteString(b.getBatchCheck().writer, obj+"\n") |
|
if err != nil { |
|
return nil, err |
|
} |
|
return catFileBatchParseInfoLine(b.getBatchCheck().reader) |
|
} |
|
|
|
func (b *catFileBatchLegacy) Close() { |
|
if b.batchContent != nil { |
|
b.batchContent.Close() |
|
b.batchContent = nil |
|
} |
|
if b.batchCheck != nil { |
|
b.batchCheck.Close() |
|
b.batchCheck = nil |
|
} |
|
}
|
|
|