summaryrefslogtreecommitdiff
path: root/src/edit/git.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/edit/git.go')
-rw-r--r--src/edit/git.go30
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