diff options
author | Unknwon <u@gogs.io> | 2017-03-12 01:59:48 -0500 |
---|---|---|
committer | Unknwon <u@gogs.io> | 2017-03-12 01:59:48 -0500 |
commit | bb19bb601e25201982b6b8d205d1a2d237ff22ad (patch) | |
tree | 35773ef2bdce0fbfc4189391c869a173c8dd3757 /models | |
parent | 05dbd3f7d78162bf06785faf0ea862fa2dc4f012 (diff) |
repo: able to view size (#1158)
Diffstat (limited to 'models')
-rw-r--r-- | models/migrations/migrations.go | 2 | ||||
-rw-r--r-- | models/migrations/v16.go | 60 | ||||
-rw-r--r-- | models/repo.go | 16 | ||||
-rw-r--r-- | models/update.go | 8 |
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) |