From bb19bb601e25201982b6b8d205d1a2d237ff22ad Mon Sep 17 00:00:00 2001 From: Unknwon Date: Sun, 12 Mar 2017 01:59:48 -0500 Subject: repo: able to view size (#1158) --- models/migrations/v16.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 models/migrations/v16.go (limited to 'models/migrations/v16.go') 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 + }) +} -- cgit v1.2.3