diff options
Diffstat (limited to 'src/edit/git.go')
-rw-r--r-- | src/edit/git.go | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/edit/git.go b/src/edit/git.go index 25d46cc..1f8f8ba 100644 --- a/src/edit/git.go +++ b/src/edit/git.go @@ -35,7 +35,7 @@ func gitTime(t time.Time) string { return fmt.Sprintf("%d %s", t.Unix(), t.Format("-0700")) } -func (edit Edit) WriteTo(w io.Writer) error { +func (edit Edit) WriteTo(w io.WriteCloser) error { var err error commit := make([]string, len(edit.Files)) i := 0 @@ -47,7 +47,7 @@ func (edit Edit) WriteTo(w io.Writer) error { } } } - _, err = fmt.Fprintf(w, `commit HEAD + _, err = fmt.Fprintf(w, `commit refs/heads/master author %s <%s> %s committer %s <%s> %s data %d @@ -70,20 +70,36 @@ data %d } } } - return nil + _, err = fmt.Fprintf(w, "done\n") + if err != nil { + return err + } + return w.Close() } func GitCommit(edit Edit) error { - cmd := exec.Command("git", "fast-import") - pip, err := cmd.StdinPipe() + cmd := exec.Command("git", "fast-import", "--done") + + // stdin + pw, err := cmd.StdinPipe() if err != nil { return err } + + // stderr + var buf bytes.Buffer + cmd.Stderr = &buf + + // run if err = cmd.Start(); err != nil { return err } - werr := edit.WriteTo(pip) - if err = cmd.Wait(); err == nil { + werr := edit.WriteTo(pw) + if err = cmd.Wait(); err != nil { + if ee, ok := err.(*exec.ExitError); ok { + ee.Stderr = buf.Bytes() + } + } else { err = werr } return err |