mirror of
https://github.com/go-gitea/gitea.git
synced 2026-07-23 14:55:19 +02:00
before: gitrepo vs git packages after: git package fully handle all git operations by the way, use `WithRepo(repo)` instead of `WithDir(repo.Path)` to hide path details. benefits: 1. remove all unnecessary wrappers, developers no need to struggle with "which package should be used" 2. simplify code, RepositoryFacade can (will) be used everywhere, all "path" details are (will be) hidden
61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
// Copyright 2019 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package pipeline
|
|
|
|
import (
|
|
"bufio"
|
|
"context"
|
|
"io"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"gitea.dev/modules/git"
|
|
"gitea.dev/modules/git/gitcmd"
|
|
)
|
|
|
|
// CatFileBatchCheck runs cat-file with --batch-check
|
|
func CatFileBatchCheck(ctx context.Context, cmd *gitcmd.Command, tmpBasePath string) error {
|
|
cmd.AddArguments("cat-file", "--batch-check")
|
|
return cmd.WithDir(tmpBasePath).RunWithStderr(ctx)
|
|
}
|
|
|
|
// CatFileBatchCheckAllObjects runs cat-file with --batch-check --batch-all
|
|
func CatFileBatchCheckAllObjects(ctx context.Context, cmd *gitcmd.Command, gitRepo *git.Repository) error {
|
|
return cmd.AddArguments("cat-file", "--batch-check", "--batch-all-objects").WithRepo(gitRepo).RunWithStderr(ctx)
|
|
}
|
|
|
|
// CatFileBatch runs cat-file --batch
|
|
func CatFileBatch(ctx context.Context, cmd *gitcmd.Command, gitRepo git.RepositoryFacade) error {
|
|
return cmd.AddArguments("cat-file", "--batch").WithRepo(gitRepo).RunWithStderr(ctx)
|
|
}
|
|
|
|
// BlobsLessThan1024FromCatFileBatchCheck reads a pipeline from cat-file --batch-check and returns the blobs <1024 in size
|
|
func BlobsLessThan1024FromCatFileBatchCheck(in io.ReadCloser, out io.WriteCloser) error {
|
|
defer out.Close()
|
|
scanner := bufio.NewScanner(in)
|
|
for scanner.Scan() {
|
|
line := scanner.Text()
|
|
if len(line) == 0 {
|
|
continue
|
|
}
|
|
fields := strings.Split(line, " ")
|
|
if len(fields) < 3 || fields[1] != "blob" {
|
|
continue
|
|
}
|
|
size, _ := strconv.Atoi(fields[2])
|
|
if size > 1024 {
|
|
continue
|
|
}
|
|
toWrite := []byte(fields[0] + "\n")
|
|
for len(toWrite) > 0 {
|
|
n, err := out.Write(toWrite)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
toWrite = toWrite[n:]
|
|
}
|
|
}
|
|
return scanner.Err()
|
|
}
|