aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--models/repo.go39
-rw-r--r--routers/api/v1/repo/repo.go15
2 files changed, 40 insertions, 14 deletions
diff --git a/models/repo.go b/models/repo.go
index 4c70269e..7a2ee3fb 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -1021,7 +1021,7 @@ func createRepository(e *xorm.Session, doer, owner *User, repo *Repository) (err
return fmt.Errorf("newRepoAction: %v", err)
}
- return nil
+ return repo.loadAttributes(e)
}
// CreateRepository creates a repository for given user or organization.
@@ -1993,12 +1993,12 @@ func (repos RepositoryList) loadAttributes(e Engine) error {
}
// Load owners
- set := make(map[int64]*User)
+ userSet := make(map[int64]*User)
for i := range repos {
- set[repos[i].OwnerID] = nil
+ userSet[repos[i].OwnerID] = nil
}
- userIDs := make([]int64, 0, len(set))
- for userID := range set {
+ userIDs := make([]int64, 0, len(userSet))
+ for userID := range userSet {
userIDs = append(userIDs, userID)
}
users := make([]*User, 0, len(userIDs))
@@ -2006,11 +2006,36 @@ func (repos RepositoryList) loadAttributes(e Engine) error {
return fmt.Errorf("find users: %v", err)
}
for i := range users {
- set[users[i].ID] = users[i]
+ userSet[users[i].ID] = users[i]
+ }
+ for i := range repos {
+ repos[i].Owner = userSet[repos[i].OwnerID]
+ }
+
+ // Load base repositories
+ repoSet := make(map[int64]*Repository)
+ for i := range repos {
+ if repos[i].IsFork {
+ repoSet[repos[i].ForkID] = nil
+ }
+ }
+ baseIDs := make([]int64, 0, len(repoSet))
+ for baseID := range repoSet {
+ baseIDs = append(baseIDs, baseID)
+ }
+ baseRepos := make([]*Repository, 0, len(baseIDs))
+ if err := e.Where("id > 0").In("id", baseIDs).Find(&baseRepos); err != nil {
+ return fmt.Errorf("find base repositories: %v", err)
+ }
+ for i := range baseRepos {
+ repoSet[baseRepos[i].ID] = baseRepos[i]
}
for i := range repos {
- repos[i].Owner = set[repos[i].OwnerID]
+ if repos[i].IsFork {
+ repos[i].BaseRepo = repoSet[repos[i].ForkID]
+ }
}
+
return nil
}
diff --git a/routers/api/v1/repo/repo.go b/routers/api/v1/repo/repo.go
index bb1832ea..727e1678 100644
--- a/routers/api/v1/repo/repo.go
+++ b/routers/api/v1/repo/repo.go
@@ -56,15 +56,16 @@ func Search(c *context.APIContext) {
return
}
+ if err = models.RepositoryList(repos).LoadAttributes(); err != nil {
+ c.JSON(500, map[string]interface{}{
+ "ok": false,
+ "error": err.Error(),
+ })
+ return
+ }
+
results := make([]*api.Repository, len(repos))
for i := range repos {
- if err = repos[i].GetOwner(); err != nil {
- c.JSON(500, map[string]interface{}{
- "ok": false,
- "error": err.Error(),
- })
- return
- }
results[i] = repos[i].APIFormat(nil)
}