code.gitea.io/gitea@v1.21.7/routers/api/v1/repo/language.go (about) 1 // Copyright 2020 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repo 5 6 import ( 7 "bytes" 8 "net/http" 9 "strconv" 10 11 repo_model "code.gitea.io/gitea/models/repo" 12 "code.gitea.io/gitea/modules/context" 13 "code.gitea.io/gitea/modules/log" 14 ) 15 16 type languageResponse []*repo_model.LanguageStat 17 18 func (l languageResponse) MarshalJSON() ([]byte, error) { 19 var buf bytes.Buffer 20 if _, err := buf.WriteString("{"); err != nil { 21 return nil, err 22 } 23 for i, lang := range l { 24 if i > 0 { 25 if _, err := buf.WriteString(","); err != nil { 26 return nil, err 27 } 28 } 29 if _, err := buf.WriteString(strconv.Quote(lang.Language)); err != nil { 30 return nil, err 31 } 32 if _, err := buf.WriteString(":"); err != nil { 33 return nil, err 34 } 35 if _, err := buf.WriteString(strconv.FormatInt(lang.Size, 10)); err != nil { 36 return nil, err 37 } 38 } 39 if _, err := buf.WriteString("}"); err != nil { 40 return nil, err 41 } 42 43 return buf.Bytes(), nil 44 } 45 46 // GetLanguages returns languages and number of bytes of code written 47 func GetLanguages(ctx *context.APIContext) { 48 // swagger:operation GET /repos/{owner}/{repo}/languages repository repoGetLanguages 49 // --- 50 // summary: Get languages and number of bytes of code written 51 // produces: 52 // - application/json 53 // parameters: 54 // - name: owner 55 // in: path 56 // description: owner of the repo 57 // type: string 58 // required: true 59 // - name: repo 60 // in: path 61 // description: name of the repo 62 // type: string 63 // required: true 64 // responses: 65 // "404": 66 // "$ref": "#/responses/notFound" 67 // "200": 68 // "$ref": "#/responses/LanguageStatistics" 69 70 langs, err := repo_model.GetLanguageStats(ctx, ctx.Repo.Repository) 71 if err != nil { 72 log.Error("GetLanguageStats failed: %v", err) 73 ctx.InternalServerError(err) 74 return 75 } 76 77 resp := make(languageResponse, len(langs)) 78 copy(resp, langs) 79 80 ctx.JSON(http.StatusOK, resp) 81 }