aboutsummaryrefslogtreecommitdiff
path: root/models
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-03-12 01:59:48 -0500
committerUnknwon <u@gogs.io>2017-03-12 01:59:48 -0500
commitbb19bb601e25201982b6b8d205d1a2d237ff22ad (patch)
tree35773ef2bdce0fbfc4189391c869a173c8dd3757 /models
parent05dbd3f7d78162bf06785faf0ea862fa2dc4f012 (diff)
repo: able to view size (#1158)
Diffstat (limited to 'models')
-rw-r--r--models/migrations/migrations.go2
-rw-r--r--models/migrations/v16.go60
-rw-r--r--models/repo.go16
-rw-r--r--models/update.go8
4 files changed, 83 insertions, 3 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index e543ae62..99ba8a43 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -60,6 +60,8 @@ var migrations = []Migration{
NewMigration("set comment updated with created", setCommentUpdatedWithCreated),
// v14 -> v15:v0.9.147
NewMigration("generate and migrate Git hooks", generateAndMigrateGitHooks),
+ // v15 -> v16:v0.10.16
+ NewMigration("update repository sizes", updateRepositorySizes),
}
// Migrate database to current version
diff --git a/models/migrations/v16.go b/models/migrations/v16.go
new file mode 100644
index 00000000..025cfef9
--- /dev/null
+++ b/models/migrations/v16.go
@@ -0,0 +1,60 @@
+// Copyright 2017 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+ "fmt"
+ "path/filepath"
+ "strings"
+
+ "github.com/go-xorm/xorm"
+ log "gopkg.in/clog.v1"
+
+ "github.com/gogits/git-module"
+
+ "github.com/gogits/gogs/modules/setting"
+)
+
+func updateRepositorySizes(x *xorm.Engine) (err error) {
+ type Repository struct {
+ ID int64
+ OwnerID int64
+ Name string
+ Size int64
+ }
+ type User struct {
+ ID int64
+ Name string
+ }
+ return x.Where("id > 0").Iterate(new(Repository),
+ func(idx int, bean interface{}) error {
+ repo := bean.(*Repository)
+ if repo.Name == "." || repo.Name == ".." {
+ return nil
+ }
+
+ user := new(User)
+ has, err := x.Where("id = ?", repo.OwnerID).Get(user)
+ if err != nil {
+ return fmt.Errorf("query owner of repository [repo_id: %d, owner_id: %d]: %v", repo.ID, repo.OwnerID, err)
+ } else if !has {
+ return nil
+ }
+
+ repoPath := filepath.Join(setting.RepoRootPath, strings.ToLower(user.Name), strings.ToLower(repo.Name)) + ".git"
+ log.Trace("[%04d]: %s", idx, repoPath)
+
+ countObject, err := git.GetRepoSize(repoPath)
+ if err != nil {
+ return fmt.Errorf("GetRepoSize: %v", err)
+ }
+
+ repo.Size = countObject.Size + countObject.SizePack
+ if _, err = x.Id(repo.ID).Cols("size").Update(repo); err != nil {
+ return fmt.Errorf("update size: %v", err)
+ }
+ return nil
+ })
+}
diff --git a/models/repo.go b/models/repo.go
index 23213b66..7fc24c29 100644
--- a/models/repo.go
+++ b/models/repo.go
@@ -140,7 +140,7 @@ func NewRepoContext() {
RemoveAllWithNotice("Clean up repository temporary data", filepath.Join(setting.AppDataPath, "tmp"))
}
-// Repository represents a git repository.
+// Repository contains information of a repository.
type Repository struct {
ID int64 `xorm:"pk autoincr"`
OwnerID int64 `xorm:"UNIQUE(s)"`
@@ -150,6 +150,7 @@ type Repository struct {
Description string
Website string
DefaultBranch string
+ Size int64 `xorm:"NOT NULL DEFAULT 0"`
NumWatches int
NumStars int
@@ -292,6 +293,19 @@ func (repo *Repository) mustOwner(e Engine) *User {
return repo.Owner
}
+func (repo *Repository) UpdateSize() error {
+ countObject, err := git.GetRepoSize(repo.RepoPath())
+ if err != nil {
+ return fmt.Errorf("GetRepoSize: %v", err)
+ }
+
+ repo.Size = countObject.Size + countObject.SizePack
+ if _, err = x.Id(repo.ID).Cols("size").Update(repo); err != nil {
+ return fmt.Errorf("update size: %v", err)
+ }
+ return nil
+}
+
// ComposeMetas composes a map of metas for rendering external issue tracker URL.
func (repo *Repository) ComposeMetas() map[string]string {
if !repo.EnableExternalTracker {
diff --git a/models/update.go b/models/update.go
index 77336ac9..95122fcc 100644
--- a/models/update.go
+++ b/models/update.go
@@ -85,7 +85,11 @@ func PushUpdate(opts PushUpdateOptions) (err error) {
return fmt.Errorf("GetRepositoryByName: %v", err)
}
- // Push tags.
+ if err = repo.UpdateSize(); err != nil {
+ return fmt.Errorf("UpdateSize: %v", err)
+ }
+
+ // Push tags
if strings.HasPrefix(opts.RefFullName, git.TAG_PREFIX) {
if err := CommitRepoAction(CommitRepoActionOptions{
PusherName: opts.PusherName,
@@ -104,7 +108,7 @@ func PushUpdate(opts PushUpdateOptions) (err error) {
var l *list.List
// Skip read parent commits when delete branch
if !isDelRef {
- // Push new branch.
+ // Push new branch
newCommit, err := gitRepo.GetCommit(opts.NewCommitID)
if err != nil {
return fmt.Errorf("GetCommit [commit_id: %s]: %v", opts.NewCommitID, err)