1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/oschina-git-repo-clean

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
fastexport.go 1.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Li Linchao Отправлено 11.07.2022 13:48 7f43d66
package main
import (
"bufio"
"io"
"os"
"os/exec"
)
// fast-export output stream iterater
type FEOutPutIter struct {
cmd *exec.Cmd
out io.ReadCloser
f *bufio.Reader
errChan <-chan error
}
func (repo *Repository) NewFastExportIter() (*FEOutPutIter, error) {
args := []string{
"-c",
"core.quotepath=false",
"fast-export",
"--show-original-ids",
"--signed-tags=strip",
"--fake-missing-tagger",
"--tag-of-filtered-object=rewrite",
"--use-done-feature",
"--mark-tags", // git >= 2.24.0
"--reencode=yes", // git >= 2.23.0
repo.context.opts.branch,
"--no-data",
}
// drop "--no-data"
if repo.context.opts.lfs {
args = args[:len(args)-1]
}
cmd := repo.GitCommand(args...)
out, err := cmd.StdoutPipe()
if err != nil {
out.Close()
return nil, err
}
cmd.Stderr = os.Stderr
err = cmd.Start()
if err != nil {
return nil, err
}
return &FEOutPutIter{
cmd: cmd,
out: out,
f: bufio.NewReader(out),
errChan: make(chan error, 1),
}, nil
}
// get data line by line from output stream
func (iter *FEOutPutIter) Next() (string, error) {
errChan := make(chan error, 1)
line, err := iter.f.ReadString('\n')
if err != nil {
if err != io.EOF {
errChan <- err
return "", err
}
return "", nil
}
return line, nil
}
func (iter *FEOutPutIter) Close() error {
err := iter.out.Close()
err2 := iter.cmd.Wait()
if err == nil {
err = err2
}
return err
}

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/oschina-git-repo-clean.git
git@api.gitlife.ru:oschina-mirror/oschina-git-repo-clean.git
oschina-mirror
oschina-git-repo-clean
oschina-git-repo-clean
main