aboutsummaryrefslogtreecommitdiffstats
path: root/models/repo.go
diff options
context:
space:
mode:
Diffstat (limited to 'models/repo.go')
-rw-r--r--models/repo.go23
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)