fix migration

This commit is contained in:
yp05327 2023-05-29 05:24:09 +00:00
parent f481624e4c
commit 07e91bf049

View File

@ -5,12 +5,13 @@ package v1_20 //nolint
import (
"fmt"
"path"
"path/filepath"
"strings"
"code.gitea.io/gitea/modules/base"
"code.gitea.io/gitea/modules/git"
"code.gitea.io/gitea/modules/log"
repo_module "code.gitea.io/gitea/modules/repository"
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
"github.com/google/licensecheck"
@ -28,6 +29,7 @@ func userPath(userName string) string {
return filepath.Join(setting.RepoRootPath, strings.ToLower(userName))
}
// Copy paste from modules/repository/file.go because we cannot import models package
func findLicenseFile(gitRepo *git.Repository, branchName string) (string, *git.TreeEntry, error) {
if branchName == "" {
return "", nil, nil
@ -47,7 +49,110 @@ func findLicenseFile(gitRepo *git.Repository, branchName string) (string, *git.T
if err != nil {
return "", nil, fmt.Errorf("ListEntries: %w", err)
}
return repo_module.FindFileInEntries(util.FileTypeLicense, entries, "", "", false)
return findFileInEntries(util.FileTypeLicense, entries, "", "", false)
}
func findFileInEntries(fileType util.FileType, entries []*git.TreeEntry, treePath, language string, tryWellKnownDirs bool) (string, *git.TreeEntry, error) {
// Create a list of extensions in priority order
// 1. Markdown files - with and without localisation - e.g. README.en-us.md or README.md
// 2. Txt files - e.g. README.txt
// 3. No extension - e.g. README
exts := append(localizedExtensions(".md", language), ".txt", "") // sorted by priority
extCount := len(exts)
targetFiles := make([]*git.TreeEntry, extCount+1)
docsEntries := make([]*git.TreeEntry, 3) // (one of docs/, .gitea/ or .github/)
for _, entry := range entries {
if tryWellKnownDirs && entry.IsDir() {
// as a special case for the top-level repo introduction README,
// fall back to subfolders, looking for e.g. docs/README.md, .gitea/README.zh-CN.txt, .github/README.txt, ...
// (note that docsEntries is ignored unless we are at the root)
lowerName := strings.ToLower(entry.Name())
switch lowerName {
case "docs":
if entry.Name() == "docs" || docsEntries[0] == nil {
docsEntries[0] = entry
}
case ".gitea":
if entry.Name() == ".gitea" || docsEntries[1] == nil {
docsEntries[1] = entry
}
case ".github":
if entry.Name() == ".github" || docsEntries[2] == nil {
docsEntries[2] = entry
}
}
continue
}
if i, ok := util.IsFileExtension(entry.Name(), fileType, exts...); ok {
log.Debug("Potential %s file: %s", fileType, entry.Name())
if targetFiles[i] == nil || base.NaturalSortLess(targetFiles[i].Name(), entry.Blob().Name()) {
if entry.IsLink() {
target, err := entry.FollowLinks()
if err != nil && !git.IsErrBadLink(err) {
return "", nil, err
} else if target != nil && (target.IsExecutable() || target.IsRegular()) {
targetFiles[i] = entry
}
} else {
targetFiles[i] = entry
}
}
}
}
var targetFile *git.TreeEntry
for _, f := range targetFiles {
if f != nil {
targetFile = f
break
}
}
if treePath == "" && targetFile == nil {
for _, subTreeEntry := range docsEntries {
if subTreeEntry == nil {
continue
}
subTree := subTreeEntry.Tree()
if subTree == nil {
// this should be impossible; if subTreeEntry exists so should this.
continue
}
var err error
childEntries, err := subTree.ListEntries()
if err != nil {
return "", nil, err
}
subfolder, targetFile, err := findFileInEntries(fileType, childEntries, subTreeEntry.Name(), language, false)
if err != nil && !git.IsErrNotExist(err) {
return "", nil, err
}
if targetFile != nil {
return path.Join(subTreeEntry.Name(), subfolder), targetFile, nil
}
}
}
return "", targetFile, nil
}
func localizedExtensions(ext, languageCode string) (localizedExts []string) {
if len(languageCode) < 1 {
return []string{ext}
}
lowerLangCode := "." + strings.ToLower(languageCode)
if strings.Contains(lowerLangCode, "-") {
underscoreLangCode := strings.ReplaceAll(lowerLangCode, "-", "_")
indexOfDash := strings.Index(lowerLangCode, "-")
// e.g. [.zh-cn.md, .zh_cn.md, .zh.md, _zh.md, .md]
return []string{lowerLangCode + ext, underscoreLangCode + ext, lowerLangCode[:indexOfDash] + ext, "_" + lowerLangCode[1:indexOfDash] + ext, ext}
}
// e.g. [.en.md, .md]
return []string{lowerLangCode + ext, ext}
}
func detectLicense(file *git.TreeEntry) ([]string, error) {