diff options
Diffstat (limited to 'pkg/git')
| -rw-r--r-- | pkg/git/git.go | 48 | 
1 files changed, 28 insertions, 20 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go index 95355f3..83f3f93 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -8,12 +8,10 @@ import (  	"fmt"  	"io"  	"io/fs" -	"log"  	"log/slog"  	"os/exec"  	"path"  	"sort" -	"syscall"  	"time"  	"github.com/go-git/go-git/v5" @@ -447,10 +445,14 @@ func (g *GitRepository) WriteInfoRefs(ctx context.Context, w io.Writer) error {  	)  	cmd.Dir = g.path -	cmd.Stdout = w +	cmd.Env = []string{ +		// TODO: get this from header. +		"GIT_PROTOCOL=version=2", +	} -	var buff bytes.Buffer -	cmd.Stderr = &buff +	var errBuff bytes.Buffer +	cmd.Stderr = &errBuff +	cmd.Stdout = w  	err := packLine(w, "# service=git-upload-pack\n")  	if err != nil { @@ -464,7 +466,7 @@ func (g *GitRepository) WriteInfoRefs(ctx context.Context, w io.Writer) error {  	err = cmd.Run()  	if err != nil { -		slog.Error("Error upload pack refs", "message", buff.String()) +		slog.Error("Error upload pack refs", "message", errBuff.String())  		return err  	}  	return nil @@ -478,19 +480,17 @@ func (g *GitRepository) WriteUploadPack(ctx context.Context, r io.Reader, w io.W  		".",  	)  	cmd.Dir = g.Path() -	cmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true} -	var buff bytes.Buffer -	cmd.Stderr = &buff -	cmd.Stdin = r -	cmd.Stdout = w - -	if err := cmd.Start(); err != nil { -		log.Printf("git: failed to start git-upload-pack: %s", err) -		return err +	cmd.Env = []string{ +		// TODO: get this from header. +		"GIT_PROTOCOL=version=2",  	} +	var errBuff bytes.Buffer +	cmd.Stderr = &errBuff +	cmd.Stdout = w +	cmd.Stdin = r -	if err := cmd.Wait(); err != nil { -		log.Printf("git: failed to wait for git-upload-pack: %s", buff.String()) +	if err := cmd.Run(); err != nil { +		slog.ErrorContext(ctx, "Git upload pack failed", "error", err, "message", errBuff.String())  		return err  	} @@ -694,8 +694,16 @@ type debugReader struct {  }  func (d *debugReader) Read(p []byte) (n int, err error) { -	fmt.Printf("READ: %x\n", p) -	return d.r.Read(p) +	r, err := d.r.Read(p) +	if err != nil { +		if errors.Is(io.EOF, err) { +			fmt.Printf("READ: EOF\n") +		} +		return r, err +	} + +	fmt.Printf("READ: %s\n", p[:r]) +	return r, nil  }  type debugWriter struct { @@ -703,6 +711,6 @@ type debugWriter struct {  }  func (d *debugWriter) Write(p []byte) (n int, err error) { -	fmt.Printf("WRITE: %x\n", p) +	fmt.Printf("WRITE: %s\n", p)  	return d.w.Write(p)  }  | 
