diff --git a/models/repo.go b/models/repo.go index 63c4178f2..5f90f97fc 100755 --- a/models/repo.go +++ b/models/repo.go @@ -409,6 +409,7 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool) ID: repo.ID, Owner: repo.Owner.APIFormat(), Name: repo.Name, + Alias: repo.Alias, FullName: repo.FullName(), FullDisplayName: repo.FullDisplayName(), Description: repo.Description, @@ -1956,6 +1957,26 @@ func getRepositoryByOwnerAndName(e Engine, ownerName, repoName string) (*Reposit return &repo, nil } +// GetRepositoryByOwnerAndAlias returns the repository by given ownername and reponame. +func GetRepositoryByOwnerAndAlias(ownerName, alias string) (*Repository, error) { + return getRepositoryByOwnerAndAlias(x, ownerName, alias) +} + +func getRepositoryByOwnerAndAlias(e Engine, ownerName, alias string) (*Repository, error) { + var repo Repository + has, err := e.Table("repository").Select("repository.*"). + Join("INNER", "`user`", "`user`.id = repository.owner_id"). + Where("repository.lower_alias = ?", strings.ToLower(alias)). + And("`user`.lower_name = ?", strings.ToLower(ownerName)). + Get(&repo) + if err != nil { + return nil, err + } else if !has { + return nil, ErrRepoNotExist{0, 0, ownerName, alias} + } + return &repo, nil +} + // GetRepositoryByName returns the repository by given name under user if exists. func GetRepositoryByName(ownerID int64, name string) (*Repository, error) { repo := &Repository{ diff --git a/modules/structs/repo.go b/modules/structs/repo.go index b824813bb..e290488a4 100755 --- a/modules/structs/repo.go +++ b/modules/structs/repo.go @@ -49,6 +49,7 @@ type Repository struct { ID int64 `json:"id"` Owner *User `json:"owner"` Name string `json:"name"` + Alias string `json:"alias"` FullName string `json:"full_name"` FullDisplayName string `json:"full_display_name"` Description string `json:"description"` diff --git a/public/home/home.js b/public/home/home.js index 9598c65d7..81392c265 100644 --- a/public/home/home.js +++ b/public/home/home.js @@ -64,18 +64,18 @@ socket.onmessage = function (e) { var currentTime = new Date().getTime(); for(var i = 0; i < messageQueue.length; i++){ var record = messageQueue[i]; - + var recordPrefix = getMsg(record); var actionName = getAction(record.OpType,isZh); - + if(record.OpType == "6" || record.OpType == "10" || record.OpType == "12" || record.OpType == "13"){ html += recordPrefix + actionName; - html += " " + getIssueText(record) + "" + html += " " + getIssueText(record) + "" } else if(record.OpType == "7" || record.OpType == "11" || record.OpType == "14" || record.OpType == "15" || record.OpType == "22" || record.OpType == "23"){ html += recordPrefix + actionName; - html += " " + getPRText(record) + "" + html += " " + getPRText(record) + "" } else if(record.OpType == "1"){ html += recordPrefix + actionName; @@ -120,7 +120,7 @@ function getMsg(record){ html += "
"; html += " \"\"" html += "
" - html += " " + record.ActUser.Name + "" + html += " " + record.ActUser.Name + "" return html; } @@ -133,7 +133,7 @@ function getRepotext(record){ } function getRepoLink(record){ return record.Repo.OwnerName + "/" + record.Repo.Name; - + } function getTime(UpdatedUnix,currentTime){ @@ -143,7 +143,7 @@ function getTime(UpdatedUnix,currentTime){ if( timeEscSecond < 0){ timeEscSecond = 1; } - + var hours= Math.floor(timeEscSecond / 3600); //计算相差分钟数 var leave2 = Math.floor(timeEscSecond % (3600)); //计算小时数后剩余的秒数 @@ -172,11 +172,11 @@ function getPRText(record){ }else{ return record.Repo.OwnerName + "/" + record.Repo.Name + "#" + getIssueId(record); } - + } function getIssueLink(record){ - + return "/" + record.Repo.OwnerName + "/" + record.Repo.Name + "/issues/" + getIssueId(record); } @@ -202,7 +202,7 @@ function getIssueText(record){ }else{ return record.Repo.OwnerName + "/" + record.Repo.Name + "#" + getIssueId(record); } - + } /* @@ -354,7 +354,7 @@ function displayRepo(json){ html += " " + record["NumStars"] + "" + record["NumForks"]; html += " "; html += " "; - html += " " + record["Name"] +""; + html += " " + record["Alias"] +""; html += "
" + record["Description"] + "
"; html += "
" if(record["Topics"] != null){ @@ -408,4 +408,4 @@ function displayOrg(json){ } } orgDiv.innerHTML = html; -} \ No newline at end of file +} diff --git a/routers/org/teams.go b/routers/org/teams.go index 8aa3e3947..17c424578 100644 --- a/routers/org/teams.go +++ b/routers/org/teams.go @@ -150,7 +150,7 @@ func TeamsRepoAction(ctx *context.Context) { case "add": repoName := path.Base(ctx.Query("repo_name")) var repo *models.Repository - repo, err = models.GetRepositoryByName(ctx.Org.Organization.ID, repoName) + repo, err = models.GetRepositoryByOwnerAndAlias(ctx.Org.Organization.Name, repoName) if err != nil { if models.IsErrRepoNotExist(err) { ctx.Flash.Error(ctx.Tr("org.teams.add_nonexistent_repo")) diff --git a/routers/repo/repo.go b/routers/repo/repo.go index a509cb52e..70705dcf1 100644 --- a/routers/repo/repo.go +++ b/routers/repo/repo.go @@ -13,6 +13,7 @@ import ( "path" "regexp" "strings" + "unicode/utf8" "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/auth" @@ -566,7 +567,7 @@ func CheckName(ctx *context.Context) { var r = make(map[string]string, 1) q := ctx.Query("q") owner := ctx.Query("owner") - if q == "" || owner == "" || len(q) > 100 || !validation.ValidAlphaDashDotChinese(q) { + if q == "" || owner == "" || utf8.RuneCountInString(q) > 100 || !validation.ValidAlphaDashDotChinese(q) { r["name"] = "" ctx.JSON(200, r) return diff --git a/services/repository/repository.go b/services/repository/repository.go index f43a3c62d..cea16516a 100644 --- a/services/repository/repository.go +++ b/services/repository/repository.go @@ -122,7 +122,7 @@ func GetRecommendRepoFromPromote(filename string) ([]map[string]interface{}, err } else { ownerName := strings.Trim(repoName[0:tmpIndex], " ") repoName := strings.Trim(repoName[tmpIndex+1:], " ") - repo, err := models.GetRepositoryByOwnerAndName(ownerName, repoName) + repo, err := models.GetRepositoryByOwnerAndAlias(ownerName, repoName) if err == nil { repoMap := make(map[string]interface{}) repoMap["ID"] = fmt.Sprint(repo.ID) diff --git a/templates/admin/repo/list.tmpl b/templates/admin/repo/list.tmpl index f946b8a46..3dee62bfb 100644 --- a/templates/admin/repo/list.tmpl +++ b/templates/admin/repo/list.tmpl @@ -36,7 +36,7 @@ {{svg "octicon-lock" 16}} {{end}} - {{.Name}} + {{.Alias}} {{.NumWatches}} {{.NumStars}} diff --git a/templates/org/team/repositories.tmpl b/templates/org/team/repositories.tmpl index e3c52e161..117c31edf 100644 --- a/templates/org/team/repositories.tmpl +++ b/templates/org/team/repositories.tmpl @@ -50,7 +50,7 @@ {{else}} {{svg "octicon-repo" 16}} {{end}} - {{$.Org.Name}}/{{.Name}} + {{$.Org.Name}}/{{.Alias}}
{{else}} diff --git a/web_src/js/index.js b/web_src/js/index.js index 41e717011..6bc0d2b88 100755 --- a/web_src/js/index.js +++ b/web_src/js/index.js @@ -2411,8 +2411,8 @@ function searchRepositories() { const items = []; $.each(response.data, (_i, item) => { items.push({ - title: item.full_name.split('/')[1], - description: item.full_name + title: item.full_display_name.split('/')[1], + description: item.full_display_name }); }); @@ -2677,7 +2677,7 @@ function initTemplateSearch() { // Parse the response from the api to work with our dropdown $.each(response.data, (_r, repo) => { filteredResponse.results.push({ - name: htmlEncode(repo.full_name), + name: htmlEncode(repo.full_display_name), value: repo.id }); });