diff options
Diffstat (limited to 'ssh_handle_upload_pack.go')
-rw-r--r-- | ssh_handle_upload_pack.go | 52 |
1 files 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 } |