summaryrefslogtreecommitdiffstats
path: root/models/repo.go
diff options
context:
space:
mode:
authorJonas <cez81@users.noreply.github.com>2017-04-11 15:30:15 +0200
committerBo-Yi Wu <appleboy.tw@gmail.com>2017-04-11 21:30:15 +0800
commitbe6edaddcba1e607884539a250bd19debabba751 (patch)
tree352d09f7eb4643fb36bae9625fbeafd77643689e /models/repo.go
parent54f0293f0ab73f357f545f8e05d16f9b254aba5e (diff)
downloadgitea-be6edaddcba1e607884539a250bd19debabba751.tar.gz
gitea-be6edaddcba1e607884539a250bd19debabba751.zip
Repo size in admin panel (#1482)
* Implementation of the feature to view repository size in admin panel * Move GetRepoSize to git module * Repository.RepoSize -> Repository.Size * RepoSize -> Size in template * Redo a few bits and pieces * Update size when syncing mirror or forking * Remove GetRepoSize * Changed fatal errors to error message * Copy migration code from Gogs * make fmt
Diffstat (limited to 'models/repo.go')
-rw-r--r--models/repo.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/models/repo.go b/models/repo.go
index c654356916..a35a7597f4 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -207,6 +207,7 @@ type Repository struct {
IsFork bool `xorm:"INDEX NOT NULL DEFAULT false"`
ForkID int64 `xorm:"INDEX"`
BaseRepo *Repository `xorm:"-"`
+ Size int64 `xorm:"NOT NULL DEFAULT 0"`
Created time.Time `xorm:"-"`
CreatedUnix int64 `xorm:"INDEX"`
@@ -546,6 +547,18 @@ func (repo *Repository) IsOwnedBy(userID int64) bool {
return repo.OwnerID == userID
}
+// UpdateSize updates the repository size, calculating it using git.GetRepoSize
+func (repo *Repository) UpdateSize() error {
+ repoInfoSize, err := git.GetRepoSize(repo.RepoPath())
+ if err != nil {
+ return fmt.Errorf("UpdateSize: %v", err)
+ }
+
+ repo.Size = repoInfoSize.Size + repoInfoSize.SizePack
+ _, err = x.ID(repo.ID).Cols("size").Update(repo)
+ return err
+}
+
// CanBeForked returns true if repository meets the requirements of being forked.
func (repo *Repository) CanBeForked() bool {
return !repo.IsBare
@@ -810,6 +823,10 @@ func MigrateRepository(u *User, opts MigrateRepoOptions) (*Repository, error) {
}
}
+ if err = repo.UpdateSize(); err != nil {
+ log.Error(4, "Failed to update size for repository: %v", err)
+ }
+
if opts.IsMirror {
if _, err = x.InsertOne(&Mirror{
RepoID: repo.ID,
@@ -1464,6 +1481,10 @@ func updateRepository(e Engine, repo *Repository, visibilityChanged bool) (err e
return fmt.Errorf("updateRepository[%d]: %v", forkRepos[i].ID, err)
}
}
+
+ if err = repo.UpdateSize(); err != nil {
+ log.Error(4, "Failed to update size for repository: %v", err)
+ }
}
return nil
@@ -2171,6 +2192,10 @@ func ForkRepository(u *User, oldRepo *Repository, name, desc string) (_ *Reposit
return nil, err
}
+ if err = repo.UpdateSize(); err != nil {
+ log.Error(4, "Failed to update size for repository: %v", err)
+ }
+
// Copy LFS meta objects in new session
sess2 := x.NewSession()
defer sessionRelease(sess2)