diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2025-06-01 21:27:29 +0200 | 
|---|---|---|
| committer | Gabriel A. Giovanini <mail@gabrielgio.me> | 2025-06-01 22:17:25 +0200 | 
| commit | 90b2a890096ee9ab3ff84c57542b5220aa9ebe4c (patch) | |
| tree | 690bec65101f206f5c9dd75370139028a5a8b629 /pkg/git | |
| parent | 2c0347566f99afec2e3963d74f4fc970e6187217 (diff) | |
| download | cerrado-90b2a890096ee9ab3ff84c57542b5220aa9ebe4c.tar.gz cerrado-90b2a890096ee9ab3ff84c57542b5220aa9ebe4c.tar.bz2 cerrado-90b2a890096ee9ab3ff84c57542b5220aa9ebe4c.zip  | |
fix: reader variable was being shadowed
Larger projects that trigger the client to go for gzip was erring. Gzip
reader was not setting a variable but rather creating a new one. That
led the "git-upload-pack" to received the compressed date rendering it
unable to read the packet lines.
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)  }  | 
