diff options
Diffstat (limited to 'models/repo.go')
-rw-r--r-- | models/repo.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/models/repo.go b/models/repo.go index 9f7ce8af1e..146868d876 100644 --- a/models/repo.go +++ b/models/repo.go @@ -168,6 +168,9 @@ type Repository struct { NumMilestones int `xorm:"NOT NULL DEFAULT 0"` NumClosedMilestones int `xorm:"NOT NULL DEFAULT 0"` NumOpenMilestones int `xorm:"-"` + NumProjects int `xorm:"NOT NULL DEFAULT 0"` + NumClosedProjects int `xorm:"NOT NULL DEFAULT 0"` + NumOpenProjects int `xorm:"-"` IsPrivate bool `xorm:"INDEX"` IsEmpty bool `xorm:"INDEX"` @@ -237,6 +240,7 @@ func (repo *Repository) AfterLoad() { repo.NumOpenIssues = repo.NumIssues - repo.NumClosedIssues repo.NumOpenPulls = repo.NumPulls - repo.NumClosedPulls repo.NumOpenMilestones = repo.NumMilestones - repo.NumClosedMilestones + repo.NumOpenProjects = repo.NumProjects - repo.NumClosedProjects } // MustOwner always returns a valid *User object to avoid @@ -307,6 +311,8 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool) parent = repo.BaseRepo.innerAPIFormat(e, mode, true) } } + + //check enabled/disabled units hasIssues := false var externalTracker *api.ExternalTracker var internalTracker *api.InternalTracker @@ -353,6 +359,10 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool) allowRebaseMerge = config.AllowRebaseMerge allowSquash = config.AllowSquash } + hasProjects := false + if _, err := repo.getUnit(e, UnitTypeProjects); err == nil { + hasProjects = true + } repo.mustOwner(e) @@ -390,6 +400,7 @@ func (repo *Repository) innerAPIFormat(e Engine, mode AccessMode, isParent bool) ExternalTracker: externalTracker, InternalTracker: internalTracker, HasWiki: hasWiki, + HasProjects: hasProjects, ExternalWiki: externalWiki, HasPullRequests: hasPullRequests, IgnoreWhitespaceConflicts: ignoreWhitespaceConflicts, @@ -1641,6 +1652,18 @@ func DeleteRepository(doer *User, uid, repoID int64) error { } } + projects, _, err := getProjects(sess, ProjectSearchOptions{ + RepoID: repoID, + }) + if err != nil { + return fmt.Errorf("get projects: %v", err) + } + for i := range projects { + if err := deleteProjectByID(sess, projects[i].ID); err != nil { + return fmt.Errorf("delete project [%d]: %v", projects[i].ID, err) + } + } + // FIXME: Remove repository files should be executed after transaction succeed. repoPath := repo.RepoPath() removeAllWithNotice(sess, "Delete repository files", repoPath) |