|
|
|
@ -1140,18 +1140,8 @@ type SearchOption struct { |
|
|
|
|
Private bool |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// FilterSQLInject tries to prevent SQL injection.
|
|
|
|
|
func FilterSQLInject(key string) string { |
|
|
|
|
key = strings.TrimSpace(key) |
|
|
|
|
key = strings.Split(key, " ")[0] |
|
|
|
|
key = strings.Replace(key, ",", "", -1) |
|
|
|
|
return key |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// SearchRepositoryByName returns given number of repositories whose name contains keyword.
|
|
|
|
|
func SearchRepositoryByName(opt SearchOption) (repos []*Repository, err error) { |
|
|
|
|
// Prevent SQL inject.
|
|
|
|
|
opt.Keyword = FilterSQLInject(opt.Keyword) |
|
|
|
|
if len(opt.Keyword) == 0 { |
|
|
|
|
return repos, nil |
|
|
|
|
} |
|
|
|
@ -1183,6 +1173,47 @@ func DeleteRepositoryArchives() error { |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// GitFsck calls 'git fsck' to check repository health.
|
|
|
|
|
func GitFsck() { |
|
|
|
|
args := append([]string{"fsck"}, setting.GitFsckArgs...) |
|
|
|
|
if err := x.Where("id > 0").Iterate(new(Repository), |
|
|
|
|
func(idx int, bean interface{}) error { |
|
|
|
|
repo := bean.(*Repository) |
|
|
|
|
if err := repo.GetOwner(); err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
repoPath := RepoPath(repo.Owner.Name, repo.Name) |
|
|
|
|
_, _, err := process.ExecDir(-1, repoPath, "Repository health check", "git", args...) |
|
|
|
|
if err != nil { |
|
|
|
|
desc := fmt.Sprintf("Fail to health check repository(%s)", repoPath) |
|
|
|
|
log.Warn(desc) |
|
|
|
|
if err = CreateRepositoryNotice(desc); err != nil { |
|
|
|
|
log.Error(4, "Fail to add notice: %v", err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
}); err != nil { |
|
|
|
|
log.Error(4, "repo.Fsck: %v", err) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func GitGcRepos() error { |
|
|
|
|
args := append([]string{"gc"}, setting.GitGcArgs...) |
|
|
|
|
return x.Where("id > 0").Iterate(new(Repository), |
|
|
|
|
func(idx int, bean interface{}) error { |
|
|
|
|
repo := bean.(*Repository) |
|
|
|
|
if err := repo.GetOwner(); err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
_, stderr, err := process.ExecDir(-1, RepoPath(repo.Owner.Name, repo.Name), "Repository garbage collection", "git", args...) |
|
|
|
|
if err != nil { |
|
|
|
|
return fmt.Errorf("%v: %v", err, stderr) |
|
|
|
|
} |
|
|
|
|
return nil |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// __ __ __ .__
|
|
|
|
|
// / \ / \_____ _/ |_ ____ | |__
|
|
|
|
|
// \ \/\/ /\__ \\ __\/ ___\| | \
|
|
|
|
|