From 197d87fe7bea10cf7be2b1d3dcdf3f71c20ca10a Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 17 Feb 2025 07:17:02 +0800 Subject: ssh_handle_upload_pack: Use system git-upload-pack --- ssh_handle_upload_pack.go | 52 +++++++++++++++++------------------------------ 1 file changed, 19 insertions(+), 33 deletions(-) diff --git a/ssh_handle_upload_pack.go b/ssh_handle_upload_pack.go index 8281cbd..3cc3bb2 100644 --- a/ssh_handle_upload_pack.go +++ b/ssh_handle_upload_pack.go @@ -1,11 +1,10 @@ package main import ( + "fmt" + "os/exec" + glider_ssh "github.com/gliderlabs/ssh" - "github.com/go-git/go-billy/v5/osfs" - "github.com/go-git/go-git/v5/plumbing/protocol/packp" - "github.com/go-git/go-git/v5/plumbing/transport" - "github.com/go-git/go-git/v5/plumbing/transport/server" ) func ssh_handle_upload_pack(session glider_ssh.Session, pubkey string, repo_identifier string) (err error) { @@ -13,37 +12,24 @@ func ssh_handle_upload_pack(session glider_ssh.Session, pubkey string, repo_iden if err != nil { return err } - endpoint, err := transport.NewEndpoint("/") - if err != nil { - return err - } - billy_fs := osfs.New(repo_path) - fs_loader := server.NewFilesystemLoader(billy_fs) - transport := server.NewServer(fs_loader) - upload_pack_session, err := transport.NewUploadPackSession(endpoint, nil) - if err != nil { - return err - } - advertised_references, err := upload_pack_session.AdvertisedReferencesContext(session.Context()) - if err != nil { - return err - } - err = advertised_references.Encode(session) - if err != nil { - return err - } - reference_update_request := packp.NewUploadPackRequest() - err = reference_update_request.Decode(session) - if err != nil { - return err - } - report_status, err := upload_pack_session.UploadPack(session.Context(), reference_update_request) + + proc := exec.CommandContext(session.Context(), "git-upload-pack", repo_path) + proc.Stdin = session + proc.Stdout = session + proc.Stderr = session.Stderr() + + err = proc.Start() if err != nil { + fmt.Fprintln(session.Stderr(), "Error while starting process:", err) return err } - err = report_status.Encode(session) - if err != nil { - return err + + err = proc.Wait() + if exitError, ok := err.(*exec.ExitError); ok { + fmt.Fprintln(session.Stderr(), "Process exited with error", exitError.ExitCode()) + } else if err != nil { + fmt.Fprintln(session.Stderr(), "Error while waiting for process:", err) } - return nil + + return err } -- cgit v1.2.3