plz / repo / git.v
39 lines · 33 sloc · 851 bytes · a449238961bbd5f9081831ef9db1ac936909a3e8
Raw
1module main
2
3import strings
4import git
5
6enum GitService {
7 receive
8 upload
9 unknown
10}
11
12fn (g GitService) str() string {
13 return match g {
14 .receive { 'receive-pack' }
15 .upload { 'upload-pack' }
16 else { 'unknown' }
17 }
18}
19
20fn extract_service_from_url(url string) GitService {
21 // Get service type from the git request.
22 // Receive (git push) or upload (git pull)
23 return if url.contains('service=git-upload-pack') {
24 GitService.upload
25 } else if url.contains('service=git-receive-pack') {
26 GitService.receive
27 } else {
28 GitService.unknown
29 }
30}
31
32fn build_git_service_response(service GitService, body string) string {
33 mut git_response := strings.new_builder(100)
34 git_response.write_string(git.write_packet('# service=git-${service}\n'))
35 git_response.write_string(git.flush_packet())
36 git_response.write_string(body)
37
38 return git_response.str()
39}
40