summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorLauris BH <lauris@nix.lv>2022-01-25 08:33:40 +0200
committerGitHub <noreply@github.com>2022-01-25 08:33:40 +0200
commit6392f4691af7db20a2ad81ec19408fa9377a5cd1 (patch)
tree0553b384cdde77323b40f8d70daa38ba8d4a5280 /models
parent9628a76ce6f4fea8508f79747d78007907e3ea76 (diff)
downloadgitea-6392f4691af7db20a2ad81ec19408fa9377a5cd1.tar.gz
gitea-6392f4691af7db20a2ad81ec19408fa9377a5cd1.zip
API: Return primary language and repository language stats API URL (#18396)
Diffstat (limited to 'models')
-rw-r--r--models/repo/repo.go24
-rw-r--r--models/repo_list.go4
2 files changed, 26 insertions, 2 deletions
diff --git a/models/repo/repo.go b/models/repo/repo.go
index a78d287315..353d707e60 100644
--- a/models/repo/repo.go
+++ b/models/repo/repo.go
@@ -222,6 +222,30 @@ func (repo *Repository) MustOwner() *user_model.User {
return repo.mustOwner(db.DefaultContext)
}
+// LoadAttributes loads attributes of the repository.
+func (repo *Repository) LoadAttributes(ctx context.Context) error {
+ // Load owner
+ if err := repo.GetOwner(ctx); err != nil {
+ return fmt.Errorf("load owner: %w", err)
+ }
+
+ // Load primary language
+ stats := make(LanguageStatList, 0, 1)
+ if err := db.GetEngine(ctx).
+ Where("`repo_id` = ? AND `is_primary` = ? AND `language` != ?", repo.ID, true, "other").
+ Find(&stats); err != nil {
+ return fmt.Errorf("find primary languages: %w", err)
+ }
+ stats.LoadAttributes()
+ for _, st := range stats {
+ if st.RepoID == repo.ID {
+ repo.PrimaryLanguage = st
+ break
+ }
+ }
+ return nil
+}
+
// FullName returns the repository full name
func (repo *Repository) FullName() string {
return repo.OwnerName + "/" + repo.Name
diff --git a/models/repo_list.go b/models/repo_list.go
index 9cb7a163fc..290919bb6d 100644
--- a/models/repo_list.go
+++ b/models/repo_list.go
@@ -623,7 +623,7 @@ func FindUserAccessibleRepoIDs(user *user_model.User) ([]int64, error) {
}
// GetUserRepositories returns a list of repositories of given user.
-func GetUserRepositories(opts *SearchRepoOptions) ([]*repo_model.Repository, int64, error) {
+func GetUserRepositories(opts *SearchRepoOptions) (RepositoryList, int64, error) {
if len(opts.OrderBy) == 0 {
opts.OrderBy = "updated_unix DESC"
}
@@ -646,6 +646,6 @@ func GetUserRepositories(opts *SearchRepoOptions) ([]*repo_model.Repository, int
}
sess = sess.Where(cond).OrderBy(opts.OrderBy.String())
- repos := make([]*repo_model.Repository, 0, opts.PageSize)
+ repos := make(RepositoryList, 0, opts.PageSize)
return repos, count, db.SetSessionPagination(sess, opts).Find(&repos)
}