summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@sbcglobal.net>2016-11-02 18:54:04 -0400
committerLuke Shumaker <lukeshu@sbcglobal.net>2016-11-02 18:54:04 -0400
commit03b6f27fdeaaeceb9c1de9d1a1b147b54ea74777 (patch)
tree38ec3de5b35f2ab4e1f9f84a3741c389443ad058
parent7d5f4e73158cfc4837e6fe1ccf609c931c4f87b7 (diff)
fix, ish
-rw-r--r--src/edit/dir.go4
-rw-r--r--src/edit/git.go30
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