mirror of
https://github.com/go-gitea/gitea.git
synced 2024-10-19 06:43:41 -04:00
08bf443016
* Inital routes to git refs api * Git refs API implementation * Update swagger * Fix copyright * Make swagger happy add basic test * Fix test * Fix test again :)
74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
package common
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"io"
|
|
|
|
"gopkg.in/src-d/go-git.v4/plumbing/protocol/packp"
|
|
"gopkg.in/src-d/go-git.v4/plumbing/transport"
|
|
"gopkg.in/src-d/go-git.v4/utils/ioutil"
|
|
)
|
|
|
|
// ServerCommand is used for a single server command execution.
|
|
type ServerCommand struct {
|
|
Stderr io.Writer
|
|
Stdout io.WriteCloser
|
|
Stdin io.Reader
|
|
}
|
|
|
|
func ServeUploadPack(cmd ServerCommand, s transport.UploadPackSession) (err error) {
|
|
ioutil.CheckClose(cmd.Stdout, &err)
|
|
|
|
ar, err := s.AdvertisedReferences()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := ar.Encode(cmd.Stdout); err != nil {
|
|
return err
|
|
}
|
|
|
|
req := packp.NewUploadPackRequest()
|
|
if err := req.Decode(cmd.Stdin); err != nil {
|
|
return err
|
|
}
|
|
|
|
var resp *packp.UploadPackResponse
|
|
resp, err = s.UploadPack(context.TODO(), req)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return resp.Encode(cmd.Stdout)
|
|
}
|
|
|
|
func ServeReceivePack(cmd ServerCommand, s transport.ReceivePackSession) error {
|
|
ar, err := s.AdvertisedReferences()
|
|
if err != nil {
|
|
return fmt.Errorf("internal error in advertised references: %s", err)
|
|
}
|
|
|
|
if err := ar.Encode(cmd.Stdout); err != nil {
|
|
return fmt.Errorf("error in advertised references encoding: %s", err)
|
|
}
|
|
|
|
req := packp.NewReferenceUpdateRequest()
|
|
if err := req.Decode(cmd.Stdin); err != nil {
|
|
return fmt.Errorf("error decoding: %s", err)
|
|
}
|
|
|
|
rs, err := s.ReceivePack(context.TODO(), req)
|
|
if rs != nil {
|
|
if err := rs.Encode(cmd.Stdout); err != nil {
|
|
return fmt.Errorf("error in encoding report status %s", err)
|
|
}
|
|
}
|
|
|
|
if err != nil {
|
|
return fmt.Errorf("error in receive pack: %s", err)
|
|
}
|
|
|
|
return nil
|
|
}
|