diff options
author | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-11-02 18:54:04 -0400 |
---|---|---|
committer | Luke Shumaker <lukeshu@sbcglobal.net> | 2016-11-02 18:54:04 -0400 |
commit | 03b6f27fdeaaeceb9c1de9d1a1b147b54ea74777 (patch) | |
tree | 38ec3de5b35f2ab4e1f9f84a3741c389443ad058 | |
parent | 7d5f4e73158cfc4837e6fe1ccf609c931c4f87b7 (diff) |
fix, ish
-rw-r--r-- | src/edit/dir.go | 4 | ||||
-rw-r--r-- | 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 |