MCPcopy Create free account
hub / github.com/coder/envbuilder / NewServer

Function NewServer

testutil/gittest/gittest.go:63–136  ·  view source on GitHub ↗

NewServer returns a http.Handler that serves a git repository. It's expected that the repository is already initialized by the caller.

(fs billy.Filesystem)

Source from the content-addressed store, hash-verified

61// NewServer returns a http.Handler that serves a git repository.
62// It's expected that the repository is already initialized by the caller.
63func NewServer(fs billy.Filesystem) http.Handler {
64 mux := http.NewServeMux()
65 mux.HandleFunc("/info/refs", func(rw http.ResponseWriter, r *http.Request) {
66 if r.URL.Query().Get("service") != "git-upload-pack" {
67 http.Error(rw, "only smart git", 403)
68 return
69 }
70 rw.Header().Set("Content-Type", "application/x-git-upload-pack-advertisement")
71 ep, err := transport.NewEndpoint("/")
72 if err != nil {
73 http.Error(rw, err.Error(), 500)
74 return
75 }
76 svr := server.NewServer(server.NewFilesystemLoader(fs))
77 sess, err := svr.NewUploadPackSession(ep, nil)
78 if err != nil {
79 http.Error(rw, err.Error(), 500)
80 return
81 }
82 ar, err := sess.AdvertisedReferencesContext(r.Context())
83 if err != nil {
84 http.Error(rw, err.Error(), 500)
85 return
86 }
87 ar.Prefix = [][]byte{
88 []byte("# service=git-upload-pack"),
89 pktline.Flush,
90 }
91 err = ar.Encode(rw)
92 if err != nil {
93 http.Error(rw, err.Error(), 500)
94 return
95 }
96 })
97 mux.HandleFunc("/git-upload-pack", func(rw http.ResponseWriter, r *http.Request) {
98 rw.Header().Set("content-type", "application/x-git-upload-pack-result")
99
100 upr := packp.NewUploadPackRequest()
101 err := upr.Decode(r.Body)
102 if err != nil {
103 http.Error(rw, err.Error(), 500)
104 return
105 }
106
107 ep, err := transport.NewEndpoint("/")
108 if err != nil {
109 http.Error(rw, err.Error(), 500)
110 log.Println(err)
111 return
112 }
113 ld := server.NewFilesystemLoader(fs)
114 svr := server.NewServer(ld)
115 sess, err := svr.NewUploadPackSession(ep, nil)
116 if err != nil {
117 http.Error(rw, err.Error(), 500)
118 log.Println(err)
119 return
120 }

Callers 3

TestCloneRepoFunction · 0.92
TestShallowCloneRepoFunction · 0.92
CreateGitServerFunction · 0.85

Calls 1

ErrorMethod · 0.80

Tested by 2

TestCloneRepoFunction · 0.74
TestShallowCloneRepoFunction · 0.74