diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2017-12-01 01:08:06 -0500 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2017-12-01 01:08:06 -0500 |
commit | d6173b990219f9dbe770185856d5735286e4d0ad (patch) | |
tree | 25ec169574d3693048128a96d415bfbc09b7d913 | |
parent | 97fb1c1311850908b2e625cf18ee584dc755a089 (diff) |
pull some bits of fi-svntogit-to-aur into a shared fiutil
-rw-r--r-- | fi-svntogit-to-aur/filter.go | 7 | ||||
-rw-r--r-- | fi-svntogit-to-aur/git.go | 85 | ||||
-rw-r--r-- | fiutil/errors.go (renamed from fi-svntogit-to-aur/errors.go) | 2 | ||||
-rw-r--r-- | fiutil/git.go | 91 |
4 files changed, 96 insertions, 89 deletions
diff --git a/fi-svntogit-to-aur/filter.go b/fi-svntogit-to-aur/filter.go index 7312c73..07054c5 100644 --- a/fi-svntogit-to-aur/filter.go +++ b/fi-svntogit-to-aur/filter.go @@ -12,6 +12,7 @@ import ( "git.lukeshu.com/go/libfastimport" "github.com/pkg/errors" + "git.parabola.nu/fiutil" ) type fullcommit struct { @@ -47,7 +48,7 @@ func NewFilter(fromRef string, toPfx string) (*Filter, error) { return nil, err } - ret.frontend, err = gitFastExport( + ret.frontend, err = fiutil.GitFastExport( "--use-done-feature", "--no-data", "--", fromRef) @@ -55,7 +56,7 @@ func NewFilter(fromRef string, toPfx string) (*Filter, error) { return nil, err } - ret.backend, err = gitFastImport("--done") + ret.backend, err = fiutil.GitFastImport("--done") if err != nil { return nil, err } @@ -107,7 +108,7 @@ func (f *Filter) pkgbuild2srcinfo(pkgbuildId string) (string, error) { cmd.Dir = f.infofile("tmp") srcinfoBody, err := cmd.Output() if err != nil { - return "", &ProcessError{ExitError: err.(*exec.ExitError), Cmd: "makepkg --printsrcinfo"} + return "", &fiutil.ProcessError{ExitError: err.(*exec.ExitError), Cmd: "makepkg --printsrcinfo"} } // Write the .SRCINFO back in to git mark := f.newmark() diff --git a/fi-svntogit-to-aur/git.go b/fi-svntogit-to-aur/git.go index 09622b3..1b32859 100644 --- a/fi-svntogit-to-aur/git.go +++ b/fi-svntogit-to-aur/git.go @@ -1,97 +1,12 @@ package main import ( - "bytes" - "os" "os/exec" "strings" - "git.lukeshu.com/go/libfastimport" "github.com/pkg/errors" ) -func gitFastExport(args ...string) (*libfastimport.Frontend, error) { - cmd := exec.Command("git", append([]string{"fast-export"}, args...)...) - - stdout, err := cmd.StdoutPipe() - if err != nil { - return nil, err - } - - var stderr bytes.Buffer - cmd.Stderr = &stderr - - err = cmd.Start() - if err != nil { - return nil, err - } - - frontend := libfastimport.NewFrontend(stdout, nil, func(err error) error { - errs := ErrorCollector{} - - errs.Add(err) - - if err := cmd.Wait(); err != nil { - if ee, ok := err.(*exec.ExitError); ok { - ee.Stderr = stderr.Bytes() - err = &ProcessError{ExitError: ee, Cmd: "git fast-export"} - } - errs.Add(err) - } - - return errs.Err() - }) - - return frontend, nil -} - -func gitFastImport(args ...string) (*libfastimport.Backend, error) { - cmd := exec.Command("git", append([]string{"fast-import", "--cat-blob-fd=3"}, args...)...) - - pipr, pipw, err := os.Pipe() - if err != nil { - return nil, err - } - - stdin, err := cmd.StdinPipe() - if err != nil { - return nil, err - } - - cmd.Stdout = os.Stdout - - var stderr bytes.Buffer - cmd.Stderr = &stderr - - cmd.ExtraFiles = []*os.File{pipw} - - err = cmd.Start() - if err != nil { - return nil, err - } - pipw.Close() - - backend := libfastimport.NewBackend(stdin, pipr, func(err error) error { - errs := ErrorCollector{} - - errs.Add(err) - - stdin.Close() - pipr.Close() - if err = cmd.Wait(); err != nil { - if ee, ok := err.(*exec.ExitError); ok { - ee.Stderr = stderr.Bytes() - err = &ProcessError{ExitError: ee, Cmd: "git fast-import"} - } - errs.Add(err) - } - - return errs.Err() - }) - - return backend, nil -} - func gitRefs() (map[string]string, error) { cmd := exec.Command("git", "for-each-ref") b, err := cmd.Output() diff --git a/fi-svntogit-to-aur/errors.go b/fiutil/errors.go index 681ef4f..631c3f1 100644 --- a/fi-svntogit-to-aur/errors.go +++ b/fiutil/errors.go @@ -1,4 +1,4 @@ -package main +package fiutil import ( "os/exec" diff --git a/fiutil/git.go b/fiutil/git.go new file mode 100644 index 0000000..18e4754 --- /dev/null +++ b/fiutil/git.go @@ -0,0 +1,91 @@ +package fiutil + +import ( + "bytes" + "os" + "os/exec" + + "git.lukeshu.com/go/libfastimport" +) + +func GitFastExport(args ...string) (*libfastimport.Frontend, error) { + cmd := exec.Command("git", append([]string{"fast-export"}, args...)...) + + stdout, err := cmd.StdoutPipe() + if err != nil { + return nil, err + } + + var stderr bytes.Buffer + cmd.Stderr = &stderr + + err = cmd.Start() + if err != nil { + return nil, err + } + + frontend := libfastimport.NewFrontend(stdout, nil, func(err error) error { + errs := ErrorCollector{} + + errs.Add(err) + + if err := cmd.Wait(); err != nil { + if ee, ok := err.(*exec.ExitError); ok { + ee.Stderr = stderr.Bytes() + err = &ProcessError{ExitError: ee, Cmd: "git fast-export"} + } + errs.Add(err) + } + + return errs.Err() + }) + + return frontend, nil +} + +func GitFastImport(args ...string) (*libfastimport.Backend, error) { + cmd := exec.Command("git", append([]string{"fast-import", "--cat-blob-fd=3"}, args...)...) + + pipr, pipw, err := os.Pipe() + if err != nil { + return nil, err + } + + stdin, err := cmd.StdinPipe() + if err != nil { + return nil, err + } + + cmd.Stdout = os.Stdout + + var stderr bytes.Buffer + cmd.Stderr = &stderr + + cmd.ExtraFiles = []*os.File{pipw} + + err = cmd.Start() + if err != nil { + return nil, err + } + pipw.Close() + + backend := libfastimport.NewBackend(stdin, pipr, func(err error) error { + errs := ErrorCollector{} + + errs.Add(err) + + stdin.Close() + pipr.Close() + if err = cmd.Wait(); err != nil { + if ee, ok := err.(*exec.ExitError); ok { + ee.Stderr = stderr.Bytes() + err = &ProcessError{ExitError: ee, Cmd: "git fast-import"} + } + errs.Add(err) + } + + return errs.Err() + }) + + return backend, nil +} |