From 03b6f27fdeaaeceb9c1de9d1a1b147b54ea74777 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Wed, 2 Nov 2016 18:54:04 -0400 Subject: fix, ish --- src/edit/dir.go | 4 ++-- src/edit/git.go | 30 +++++++++++++++++++++++------- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/edit/dir.go b/src/edit/dir.go index 0cfe514..d07eb78 100644 --- a/src/edit/dir.go +++ b/src/edit/dir.go @@ -64,7 +64,7 @@ func ServeGit(out http.ResponseWriter, in *http.Request) { Time: time.Now(), Message: msg + "\n", Files: map[string][]byte{ - upath: content, + upath[1:]: content, }, } errcheck(GitCommit(edit)) @@ -89,7 +89,7 @@ func ServeGit(out http.ResponseWriter, in *http.Request) { Time: time.Now(), Message: msg + "\n", Files: map[string][]byte{ - upath: nil, + upath[1:]: nil, }, } errcheck(GitCommit(edit)) 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 -- cgit v1.2.3