diff options
46 files changed, 231 insertions, 221 deletions
diff --git a/cmd/serv.go b/cmd/serv.go index 1b41a5a078..fb1e581134 100644 --- a/cmd/serv.go +++ b/cmd/serv.go @@ -26,7 +26,6 @@ import ( "github.com/dgrijalva/jwt-go" "github.com/kballard/go-shellquote" - "github.com/unknwon/com" "github.com/urfave/cli" ) @@ -105,7 +104,10 @@ func runServ(c *cli.Context) error { if len(keys) != 2 || keys[0] != "key" { fail("Key ID format error", "Invalid key argument: %s", c.Args()[0]) } - keyID := com.StrTo(keys[1]).MustInt64() + keyID, err := strconv.ParseInt(keys[1], 10, 64) + if err != nil { + fail("Key ID format error", "Invalid key argument: %s", c.Args()[1]) + } cmd := os.Getenv("SSH_ORIGINAL_COMMAND") if len(cmd) == 0 { diff --git a/contrib/pr/checkout.go b/contrib/pr/checkout.go index 5288380825..9346577bd6 100644 --- a/contrib/pr/checkout.go +++ b/contrib/pr/checkout.go @@ -37,7 +37,6 @@ import ( "github.com/go-git/go-git/v5/config" "github.com/go-git/go-git/v5/plumbing" context2 "github.com/gorilla/context" - "github.com/unknwon/com" "xorm.io/xorm" ) @@ -111,7 +110,7 @@ func runPR() { models.LoadFixtures() util.RemoveAll(setting.RepoRootPath) util.RemoveAll(models.LocalCopyPath()) - com.CopyDir(path.Join(curDir, "integrations/gitea-repositories-meta"), setting.RepoRootPath) + util.CopyDir(path.Join(curDir, "integrations/gitea-repositories-meta"), setting.RepoRootPath) log.Printf("[PR] Setting up router\n") //routers.GlobalInit() diff --git a/integrations/git_helper_for_declarative_test.go b/integrations/git_helper_for_declarative_test.go index f681cd143a..d99d80a7c7 100644 --- a/integrations/git_helper_for_declarative_test.go +++ b/integrations/git_helper_for_declarative_test.go @@ -24,7 +24,6 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/stretchr/testify/assert" - "github.com/unknwon/com" ) func withKeyFile(t *testing.T, keyname string, callback func(string)) { @@ -112,7 +111,9 @@ func onGiteaRun(t *testing.T, callback func(*testing.T, *url.URL), prepare ...bo func doGitClone(dstLocalPath string, u *url.URL) func(*testing.T) { return func(t *testing.T) { assert.NoError(t, git.CloneWithArgs(context.Background(), u.String(), dstLocalPath, allowLFSFilters(), git.CloneRepoOptions{})) - assert.True(t, com.IsExist(filepath.Join(dstLocalPath, "README.md"))) + exist, err := util.IsExist(filepath.Join(dstLocalPath, "README.md")) + assert.NoError(t, err) + assert.True(t, exist) } } @@ -122,7 +123,9 @@ func doGitCloneFail(u *url.URL) func(*testing.T) { assert.NoError(t, err) defer util.RemoveAll(tmpDir) assert.Error(t, git.Clone(u.String(), tmpDir, git.CloneRepoOptions{})) - assert.False(t, com.IsExist(filepath.Join(tmpDir, "README.md"))) + exist, err := util.IsExist(filepath.Join(tmpDir, "README.md")) + assert.NoError(t, err) + assert.False(t, exist) } } diff --git a/integrations/integration_test.go b/integrations/integration_test.go index 00aba15603..f3b2644c78 100644 --- a/integrations/integration_test.go +++ b/integrations/integration_test.go @@ -37,7 +37,6 @@ import ( "github.com/PuerkitoBio/goquery" "github.com/go-chi/chi" "github.com/stretchr/testify/assert" - "github.com/unknwon/com" ) var c chi.Router @@ -231,8 +230,7 @@ func prepareTestEnv(t testing.TB, skip ...int) func() { assert.NoError(t, models.LoadFixtures()) assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, com.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), - setting.RepoRootPath)) + assert.NoError(t, util.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) return deferFn } @@ -473,6 +471,5 @@ func resetFixtures(t *testing.T) { assert.NoError(t, queue.GetManager().FlushAll(context.Background(), -1)) assert.NoError(t, models.LoadFixtures()) assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, com.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), - setting.RepoRootPath)) + assert.NoError(t, util.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) } diff --git a/integrations/migration-test/migration_test.go b/integrations/migration-test/migration_test.go index 19a132054f..852c0b737c 100644 --- a/integrations/migration-test/migration_test.go +++ b/integrations/migration-test/migration_test.go @@ -27,7 +27,6 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/stretchr/testify/assert" - "github.com/unknwon/com" "xorm.io/xorm" ) @@ -60,7 +59,7 @@ func initMigrationTest(t *testing.T) func() { assert.True(t, len(setting.RepoRootPath) != 0) assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) - assert.NoError(t, com.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) + assert.NoError(t, util.CopyDir(path.Join(filepath.Dir(setting.AppPath), "integrations/gitea-repositories-meta"), setting.RepoRootPath)) setting.CheckLFSVersion() setting.InitDBConfig() diff --git a/models/action.go b/models/action.go index c39fdc397a..ccf161192e 100644 --- a/models/action.go +++ b/models/action.go @@ -18,7 +18,6 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" - "github.com/unknwon/com" "xorm.io/builder" ) @@ -266,7 +265,7 @@ func (a *Action) GetIssueInfos() []string { // GetIssueTitle returns the title of first issue associated // with the action. func (a *Action) GetIssueTitle() string { - index := com.StrTo(a.GetIssueInfos()[0]).MustInt64() + index, _ := strconv.ParseInt(a.GetIssueInfos()[0], 10, 64) issue, err := GetIssueByIndex(a.RepoID, index) if err != nil { log.Error("GetIssueByIndex: %v", err) @@ -278,7 +277,7 @@ func (a *Action) GetIssueTitle() string { // GetIssueContent returns the content of first issue associated with // this action. func (a *Action) GetIssueContent() string { - index := com.StrTo(a.GetIssueInfos()[0]).MustInt64() + index, _ := strconv.ParseInt(a.GetIssueInfos()[0], 10, 64) issue, err := GetIssueByIndex(a.RepoID, index) if err != nil { log.Error("GetIssueByIndex: %v", err) diff --git a/models/admin.go b/models/admin.go index 903e35b0c9..420adbcda9 100644 --- a/models/admin.go +++ b/models/admin.go @@ -12,8 +12,6 @@ import ( "code.gitea.io/gitea/modules/storage" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" - - "github.com/unknwon/com" ) //NoticeType describes the notice type @@ -36,7 +34,7 @@ type Notice struct { // TrStr returns a translation format string. func (n *Notice) TrStr() string { - return "admin.notices.type_" + com.ToStr(n.Type) + return fmt.Sprintf("admin.notices.type_%d", n.Type) } // CreateNotice creates new system notice. diff --git a/models/branches.go b/models/branches.go index 144767ee95..80df8c433e 100644 --- a/models/branches.go +++ b/models/branches.go @@ -16,7 +16,6 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/gobwas/glob" - "github.com/unknwon/com" ) // ProtectedBranch struct @@ -483,7 +482,7 @@ func updateTeamWhitelist(repo *Repository, currentWhitelist, newWhitelist []int6 whitelist = make([]int64, 0, len(teams)) for i := range teams { - if com.IsSliceContainsInt64(newWhitelist, teams[i].ID) { + if util.IsInt64InSlice(teams[i].ID, newWhitelist) { whitelist = append(whitelist, teams[i].ID) } } diff --git a/models/issue.go b/models/issue.go index 787d873f24..3161fd3e82 100644 --- a/models/issue.go +++ b/models/issue.go @@ -20,7 +20,6 @@ import ( "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "xorm.io/builder" "xorm.io/xorm" ) @@ -386,7 +385,7 @@ func (issue *Issue) State() api.StateType { // HashTag returns unique hash tag for issue. func (issue *Issue) HashTag() string { - return "issue-" + com.ToStr(issue.ID) + return fmt.Sprintf("issue-%d", issue.ID) } // IsPoster returns true if given user by ID is the poster. @@ -1374,7 +1373,8 @@ func parseCountResult(results []map[string][]byte) int64 { return 0 } for _, result := range results[0] { - return com.StrTo(string(result)).MustInt64() + c, _ := strconv.ParseInt(string(result), 10, 64) + return c } return 0 } diff --git a/models/issue_comment.go b/models/issue_comment.go index 7bcea40b93..a5cb91ac75 100644 --- a/models/issue_comment.go +++ b/models/issue_comment.go @@ -22,7 +22,6 @@ import ( "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/timeutil" - "github.com/unknwon/com" "xorm.io/builder" "xorm.io/xorm" ) @@ -367,7 +366,7 @@ func (c *Comment) HashTag() string { // EventTag returns unique event hash tag for comment. func (c *Comment) EventTag() string { - return "event-" + com.ToStr(c.ID) + return fmt.Sprintf("event-%d", c.ID) } // LoadLabel if comment.Type is CommentTypeLabel, then load Label diff --git a/models/issue_xref.go b/models/issue_xref.go index 104691fe93..7834b6ecc0 100644 --- a/models/issue_xref.go +++ b/models/issue_xref.go @@ -10,7 +10,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/references" - "github.com/unknwon/com" "xorm.io/xorm" ) @@ -324,7 +323,7 @@ func (comment *Comment) RefIssueIdent() string { return "" } // FIXME: check this name for cross-repository references (#7901 if it gets merged) - return "#" + com.ToStr(comment.RefIssue.Index) + return fmt.Sprintf("#%d", comment.RefIssue.Index) } // __________ .__ .__ __________ __ diff --git a/models/login_source.go b/models/login_source.go index 1de24a9cf7..4f577d6ca7 100644 --- a/models/login_source.go +++ b/models/login_source.go @@ -12,6 +12,7 @@ import ( "fmt" "net/smtp" "net/textproto" + "strconv" "strings" "code.gitea.io/gitea/modules/auth/ldap" @@ -20,8 +21,8 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" + "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "xorm.io/xorm" "xorm.io/xorm/convert" ) @@ -180,7 +181,9 @@ func Cell2Int64(val xorm.Cell) int64 { switch (*val).(type) { case []uint8: log.Trace("Cell2Int64 ([]uint8): %v", *val) - return com.StrTo(string((*val).([]uint8))).MustInt64() + + v, _ := strconv.ParseInt(string((*val).([]uint8)), 10, 64) + return v } return (*val).(int64) } @@ -200,7 +203,7 @@ func (source *LoginSource) BeforeSet(colName string, val xorm.Cell) { case LoginSSPI: source.Cfg = new(SSPIConfig) default: - panic("unrecognized login source type: " + com.ToStr(*val)) + panic(fmt.Sprintf("unrecognized login source type: %v", *val)) } } } @@ -610,7 +613,7 @@ func LoginViaSMTP(user *User, login, password string, sourceID int64, cfg *SMTPC idx := strings.Index(login, "@") if idx == -1 { return nil, ErrUserNotExist{0, login, 0} - } else if !com.IsSliceContainsStr(strings.Split(cfg.AllowedDomains, ","), login[idx+1:]) { + } else if !util.IsStringInSlice(login[idx+1:], strings.Split(cfg.AllowedDomains, ","), true) { return nil, ErrUserNotExist{0, login, 0} } } diff --git a/models/oauth2_application.go b/models/oauth2_application.go index 1c7937685c..af4d280d0c 100644 --- a/models/oauth2_application.go +++ b/models/oauth2_application.go @@ -14,10 +14,10 @@ import ( "code.gitea.io/gitea/modules/secret" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/timeutil" + "code.gitea.io/gitea/modules/util" "github.com/dgrijalva/jwt-go" uuid "github.com/google/uuid" - "github.com/unknwon/com" "golang.org/x/crypto/bcrypt" "xorm.io/xorm" ) @@ -62,7 +62,7 @@ func (app *OAuth2Application) LoadUser() (err error) { // ContainsRedirectURI checks if redirectURI is allowed for app func (app *OAuth2Application) ContainsRedirectURI(redirectURI string) bool { - return com.IsSliceContainsStr(app.RedirectURIs, redirectURI) + return util.IsStringInSlice(redirectURI, app.RedirectURIs, true) } // GenerateClientSecret will generate the client secret and returns the plaintext and saves the hash at the database diff --git a/models/repo.go b/models/repo.go index d791b6cbd2..7dfe14c85b 100644 --- a/models/repo.go +++ b/models/repo.go @@ -34,7 +34,6 @@ import ( "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "xorm.io/builder" ) @@ -85,7 +84,7 @@ func loadRepoConfig() { } for _, f := range customFiles { - if !com.IsSliceContainsStr(files, f) { + if !util.IsStringInSlice(f, files, true) { files = append(files, f) } } @@ -115,12 +114,12 @@ func loadRepoConfig() { // Filter out invalid names and promote preferred licenses. sortedLicenses := make([]string, 0, len(Licenses)) for _, name := range setting.Repository.PreferredLicenses { - if com.IsSliceContainsStr(Licenses, name) { + if util.IsStringInSlice(name, Licenses, true) { sortedLicenses = append(sortedLicenses, name) } } for _, name := range Licenses { - if !com.IsSliceContainsStr(setting.Repository.PreferredLicenses, name) { + if !util.IsStringInSlice(name, setting.Repository.PreferredLicenses, true) { sortedLicenses = append(sortedLicenses, name) } } @@ -1933,7 +1932,7 @@ func repoStatsCheck(ctx context.Context, checker *repoChecker) { return } for _, result := range results { - id := com.StrTo(result["id"]).MustInt64() + id, _ := strconv.ParseInt(string(result["id"]), 10, 64) select { case <-ctx.Done(): log.Warn("CheckRepoStats: Cancelled before checking %s for Repo[%d]", checker.desc, id) @@ -2001,7 +2000,7 @@ func CheckRepoStats(ctx context.Context) error { log.Error("Select %s: %v", desc, err) } else { for _, result := range results { - id := com.StrTo(result["id"]).MustInt64() + id, _ := strconv.ParseInt(string(result["id"]), 10, 64) select { case <-ctx.Done(): log.Warn("CheckRepoStats: Cancelled during %s for repo ID %d", desc, id) @@ -2024,7 +2023,7 @@ func CheckRepoStats(ctx context.Context) error { log.Error("Select %s: %v", desc, err) } else { for _, result := range results { - id := com.StrTo(result["id"]).MustInt64() + id, _ := strconv.ParseInt(string(result["id"]), 10, 64) select { case <-ctx.Done(): log.Warn("CheckRepoStats: Cancelled") @@ -2047,7 +2046,7 @@ func CheckRepoStats(ctx context.Context) error { log.Error("Select repository count 'num_forks': %v", err) } else { for _, result := range results { - id := com.StrTo(result["id"]).MustInt64() + id, _ := strconv.ParseInt(string(result["id"]), 10, 64) select { case <-ctx.Done(): log.Warn("CheckRepoStats: Cancelled") diff --git a/models/repo_unit.go b/models/repo_unit.go index b208276d9d..8c2d458758 100644 --- a/models/repo_unit.go +++ b/models/repo_unit.go @@ -6,10 +6,10 @@ package models import ( "encoding/json" + "fmt" "code.gitea.io/gitea/modules/timeutil" - "github.com/unknwon/com" "xorm.io/xorm" "xorm.io/xorm/convert" ) @@ -147,7 +147,7 @@ func (r *RepoUnit) BeforeSet(colName string, val xorm.Cell) { case UnitTypeIssues: r.Config = new(IssuesConfig) default: - panic("unrecognized repo unit type: " + com.ToStr(*val)) + panic(fmt.Sprintf("unrecognized repo unit type: %v", *val)) } } } diff --git a/models/ssh_key.go b/models/ssh_key.go index f13fc61914..b2e4326559 100644 --- a/models/ssh_key.go +++ b/models/ssh_key.go @@ -20,6 +20,7 @@ import ( "math/big" "os" "path/filepath" + "strconv" "strings" "sync" "time" @@ -30,7 +31,6 @@ import ( "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "golang.org/x/crypto/ssh" "xorm.io/builder" "xorm.io/xorm" @@ -252,7 +252,11 @@ func SSHKeyGenParsePublicKey(key string) (string, int, error) { } keyType := strings.Trim(fields[len(fields)-1], "()\r\n") - return strings.ToLower(keyType), com.StrTo(fields[0]).MustInt(), nil + length, err := strconv.ParseInt(fields[0], 10, 32) + if err != nil { + return "", 0, err + } + return strings.ToLower(keyType), int(length), nil } // SSHNativeParsePublicKey extracts the key type and length using the golang SSH library. @@ -744,7 +748,7 @@ func rewriteAllPublicKeys(e Engine) error { } if isExist { bakPath := fmt.Sprintf("%s_%d.gitea_bak", fPath, time.Now().Unix()) - if err = com.Copy(fPath, bakPath); err != nil { + if err = util.CopyFile(fPath, bakPath); err != nil { return err } } @@ -1226,7 +1230,7 @@ func rewriteAllPrincipalKeys(e Engine) error { } if isExist { bakPath := fmt.Sprintf("%s_%d.gitea_bak", fPath, time.Now().Unix()) - if err = com.Copy(fPath, bakPath); err != nil { + if err = util.CopyFile(fPath, bakPath); err != nil { return err } } diff --git a/models/unit_tests.go b/models/unit_tests.go index 7254cbf66b..3299630634 100644 --- a/models/unit_tests.go +++ b/models/unit_tests.go @@ -19,7 +19,6 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/stretchr/testify/assert" - "github.com/unknwon/com" "xorm.io/xorm" "xorm.io/xorm/names" ) @@ -82,8 +81,8 @@ func MainTest(m *testing.M, pathToGiteaRoot string) { if err = util.RemoveAll(setting.RepoRootPath); err != nil { fatalTestError("util.RemoveAll: %v\n", err) } - if err = com.CopyDir(filepath.Join(pathToGiteaRoot, "integrations", "gitea-repositories-meta"), setting.RepoRootPath); err != nil { - fatalTestError("com.CopyDir: %v\n", err) + if err = util.CopyDir(filepath.Join(pathToGiteaRoot, "integrations", "gitea-repositories-meta"), setting.RepoRootPath); err != nil { + fatalTestError("util.CopyDir: %v\n", err) } exitStatus := m.Run() @@ -126,7 +125,7 @@ func PrepareTestEnv(t testing.TB) { assert.NoError(t, PrepareTestDatabase()) assert.NoError(t, util.RemoveAll(setting.RepoRootPath)) metaPath := filepath.Join(giteaRoot, "integrations", "gitea-repositories-meta") - assert.NoError(t, com.CopyDir(metaPath, setting.RepoRootPath)) + assert.NoError(t, util.CopyDir(metaPath, setting.RepoRootPath)) base.SetupGiteaRoot() // Makes sure GITEA_ROOT is set } diff --git a/models/user.go b/models/user.go index 4bf9e196a0..73178f256c 100644 --- a/models/user.go +++ b/models/user.go @@ -32,7 +32,6 @@ import ( "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "golang.org/x/crypto/argon2" "golang.org/x/crypto/bcrypt" "golang.org/x/crypto/pbkdf2" @@ -315,7 +314,7 @@ func (u *User) HTMLURL() string { // GenerateEmailActivateCode generates an activate code based on user information and given e-mail. func (u *User) GenerateEmailActivateCode(email string) string { code := base.CreateTimeLimitCode( - com.ToStr(u.ID)+email+u.LowerName+u.Passwd+u.Rands, + fmt.Sprintf("%d%s%s%s%s", u.ID, email, u.LowerName, u.Passwd, u.Rands), setting.Service.ActiveCodeLives, nil) // Add tail hex username @@ -880,7 +879,7 @@ func VerifyUserActiveCode(code string) (user *User) { if user = getVerifyUser(code); user != nil { // time limit code prefix := code[:base.TimeLimitCodeLength] - data := com.ToStr(user.ID) + user.Email + user.LowerName + user.Passwd + user.Rands + data := fmt.Sprintf("%d%s%s%s%s", user.ID, user.Email, user.LowerName, user.Passwd, user.Rands) if base.VerifyTimeLimitCode(data, minutes, prefix) { return user @@ -896,7 +895,7 @@ func VerifyActiveEmailCode(code, email string) *EmailAddress { if user := getVerifyUser(code); user != nil { // time limit code prefix := code[:base.TimeLimitCodeLength] - data := com.ToStr(user.ID) + email + user.LowerName + user.Passwd + user.Rands + data := fmt.Sprintf("%d%s%s%s%s", user.ID, email, user.LowerName, user.Passwd, user.Rands) if base.VerifyTimeLimitCode(data, minutes, prefix) { emailAddress := &EmailAddress{UID: user.ID, Email: email} diff --git a/modules/base/tool.go b/modules/base/tool.go index 00b13f76c7..7ac572b85b 100644 --- a/modules/base/tool.go +++ b/modules/base/tool.go @@ -26,7 +26,6 @@ import ( "code.gitea.io/gitea/modules/setting" "github.com/dustin/go-humanize" - "github.com/unknwon/com" ) // EncodeMD5 encodes string to md5 hex value. @@ -86,8 +85,8 @@ func VerifyTimeLimitCode(data string, minutes int, code string) bool { // split code start := code[:12] lives := code[12:18] - if d, err := com.StrTo(lives).Int(); err == nil { - minutes = d + if d, err := strconv.ParseInt(lives, 10, 0); err == nil { + minutes = int(d) } // right active code @@ -131,7 +130,7 @@ func CreateTimeLimitCode(data string, minutes int, startInf interface{}) string // create sha1 encode string sh := sha1.New() - _, _ = sh.Write([]byte(data + setting.SecretKey + startStr + endStr + com.ToStr(minutes))) + _, _ = sh.Write([]byte(fmt.Sprintf("%s%s%s%s%d", data, setting.SecretKey, startStr, endStr, minutes))) encoded := hex.EncodeToString(sh.Sum(nil)) code := fmt.Sprintf("%s%06d%s", startStr, minutes, encoded) @@ -223,7 +222,7 @@ func TruncateString(str string, limit int) string { func StringsToInt64s(strs []string) ([]int64, error) { ints := make([]int64, len(strs)) for i := range strs { - n, err := com.StrTo(strs[i]).Int64() + n, err := strconv.ParseInt(strs[i], 10, 64) if err != nil { return ints, err } diff --git a/modules/convert/convert.go b/modules/convert/convert.go index 63dd072fc4..109931dbc3 100644 --- a/modules/convert/convert.go +++ b/modules/convert/convert.go @@ -17,8 +17,6 @@ import ( api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/webhook" - - "github.com/unknwon/com" ) // ToEmail convert models.EmailAddress to api.Email @@ -169,7 +167,7 @@ func ToPublicKey(apiLink string, key *models.PublicKey) *api.PublicKey { return &api.PublicKey{ ID: key.ID, Key: key.Content, - URL: apiLink + com.ToStr(key.ID), + URL: fmt.Sprintf("%s%d", apiLink, key.ID), Title: key.Name, Fingerprint: key.Fingerprint, Created: key.CreatedUnix.AsTime(), @@ -263,7 +261,7 @@ func ToDeployKey(apiLink string, key *models.DeployKey) *api.DeployKey { KeyID: key.KeyID, Key: key.Content, Fingerprint: key.Fingerprint, - URL: apiLink + com.ToStr(key.ID), + URL: fmt.Sprintf("%s%d", apiLink, key.ID), Title: key.Name, Created: key.CreatedUnix.AsTime(), ReadOnly: key.Mode == models.AccessModeRead, // All deploy keys are read-only. diff --git a/modules/git/repo.go b/modules/git/repo.go index e824dcc3f2..515899ab04 100644 --- a/modules/git/repo.go +++ b/modules/git/repo.go @@ -15,8 +15,6 @@ import ( "strconv" "strings" "time" - - "github.com/unknwon/com" ) // GPGSettings represents the default GPG settings for this repository @@ -309,21 +307,24 @@ func parseSize(objects string) *CountObject { for _, line := range strings.Split(objects, "\n") { switch { case strings.HasPrefix(line, statCount): - repoSize.Count = com.StrTo(line[7:]).MustInt64() + repoSize.Count, _ = strconv.ParseInt(line[7:], 10, 64) case strings.HasPrefix(line, statSize): - repoSize.Size = com.StrTo(line[6:]).MustInt64() * 1024 + repoSize.Size, _ = strconv.ParseInt(line[6:], 10, 64) + repoSize.Size *= 1024 case strings.HasPrefix(line, statInpack): - repoSize.InPack = com.StrTo(line[9:]).MustInt64() + repoSize.InPack, _ = strconv.ParseInt(line[9:], 10, 64) case strings.HasPrefix(line, statPacks): - repoSize.Packs = com.StrTo(line[7:]).MustInt64() + repoSize.Packs, _ = strconv.ParseInt(line[7:], 10, 64) case strings.HasPrefix(line, statSizePack): - repoSize.SizePack = com.StrTo(line[11:]).MustInt64() * 1024 + repoSize.Count, _ = strconv.ParseInt(line[11:], 10, 64) + repoSize.Count *= 1024 case strings.HasPrefix(line, statPrunePackage): - repoSize.PrunePack = com.StrTo(line[16:]).MustInt64() + repoSize.PrunePack, _ = strconv.ParseInt(line[16:], 10, 64) case strings.HasPrefix(line, statGarbage): - repoSize.Garbage = com.StrTo(line[9:]).MustInt64() + repoSize.Garbage, _ = strconv.ParseInt(line[9:], 10, 64) case strings.HasPrefix(line, statSizeGarbage): - repoSize.SizeGarbage = com.StrTo(line[14:]).MustInt64() * 1024 + repoSize.SizeGarbage, _ = strconv.ParseInt(line[14:], 10, 64) + repoSize.SizeGarbage *= 1024 } } return repoSize diff --git a/modules/ssh/ssh.go b/modules/ssh/ssh.go index 4ba52d5653..2b7fd593b5 100644 --- a/modules/ssh/ssh.go +++ b/modules/ssh/ssh.go @@ -25,7 +25,6 @@ import ( "code.gitea.io/gitea/modules/util" "github.com/gliderlabs/ssh" - "github.com/unknwon/com" gossh "golang.org/x/crypto/ssh" ) @@ -58,13 +57,13 @@ func getExitStatusFromError(err error) int { } func sessionHandler(session ssh.Session) { - keyID := session.Context().Value(giteaKeyID).(int64) + keyID := fmt.Sprintf("%d", session.Context().Value(giteaKeyID).(int64)) command := session.RawCommand() log.Trace("SSH: Payload: %v", command) - args := []string{"serv", "key-" + com.ToStr(keyID), "--config=" + setting.CustomConf} + args := []string{"serv", "key-" + keyID, "--config=" + setting.CustomConf} log.Trace("SSH: Arguments: %v", args) cmd := exec.Command(setting.AppPath, args...) cmd.Env = append( diff --git a/modules/util/compare.go b/modules/util/compare.go index d4f77aed3b..cd9ba0d91c 100644 --- a/modules/util/compare.go +++ b/modules/util/compare.go @@ -4,7 +4,10 @@ package util -import "sort" +import ( + "sort" + "strings" +) // Int64Slice attaches the methods of Interface to []int64, sorting in increasing order. type Int64Slice []int64 @@ -36,10 +39,22 @@ func ExistsInSlice(target string, slice []string) bool { } // IsStringInSlice sequential searches if string exists in slice. -func IsStringInSlice(target string, slice []string) bool { +func IsStringInSlice(target string, slice []string, insensitive ...bool) bool { + caseInsensitive := false + if len(insensitive) != 0 && insensitive[0] { + caseInsensitive = true + target = strings.ToLower(target) + } + for i := 0; i < len(slice); i++ { - if slice[i] == target { - return true + if caseInsensitive { + if strings.ToLower(slice[i]) == target { + return true + } + } else { + if slice[i] == target { + return true + } } } return false diff --git a/modules/util/copy.go b/modules/util/copy.go new file mode 100644 index 0000000000..46765849dc --- /dev/null +++ b/modules/util/copy.go @@ -0,0 +1,20 @@ +// Copyright 2020 The Gitea 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 util + +import ( + "github.com/unknwon/com" +) + +// CopyFile copies file from source to target path. +func CopyFile(src, dest string) error { + return com.Copy(src, dest) +} + +// CopyDir copy files recursively from source to target directory. +// It returns error when error occurs in underlying functions. +func CopyDir(srcPath, destPath string) error { + return com.CopyDir(srcPath, destPath) +} diff --git a/routers/admin/auths.go b/routers/admin/auths.go index bae1c863e9..ce9dd38360 100644 --- a/routers/admin/auths.go +++ b/routers/admin/auths.go @@ -20,7 +20,6 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "xorm.io/xorm/convert" ) @@ -373,7 +372,7 @@ func EditAuthSourcePost(ctx *context.Context, form auth.AuthenticationForm) { log.Trace("Authentication changed by admin(%s): %d", ctx.User.Name, source.ID) ctx.Flash.Success(ctx.Tr("admin.auths.update_success")) - ctx.Redirect(setting.AppSubURL + "/admin/auths/" + com.ToStr(form.ID)) + ctx.Redirect(setting.AppSubURL + "/admin/auths/" + fmt.Sprint(form.ID)) } // DeleteAuthSource response for deleting an auth source diff --git a/routers/admin/emails.go b/routers/admin/emails.go index f0b14ce5e5..4cc7253ca9 100644 --- a/routers/admin/emails.go +++ b/routers/admin/emails.go @@ -14,8 +14,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/util" - - "github.com/unknwon/com" ) const ( @@ -114,7 +112,7 @@ func ActivateEmail(ctx *context.Context) { truefalse := map[string]bool{"1": true, "0": false} - uid := com.StrTo(ctx.Query("uid")).MustInt64() + uid := ctx.QueryInt64("uid") email := ctx.Query("email") primary, okp := truefalse[ctx.Query("primary")] activate, oka := truefalse[ctx.Query("activate")] diff --git a/routers/admin/notice.go b/routers/admin/notice.go index ad2bad2163..2ee1b59730 100644 --- a/routers/admin/notice.go +++ b/routers/admin/notice.go @@ -6,13 +6,13 @@ package admin import ( + "strconv" + "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/base" "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" - - "github.com/unknwon/com" ) const ( @@ -50,7 +50,7 @@ func DeleteNotices(ctx *context.Context) { strs := ctx.QueryStrings("ids[]") ids := make([]int64, 0, len(strs)) for i := range strs { - id := com.StrTo(strs[i]).MustInt64() + id, _ := strconv.ParseInt(strs[i], 10, 64) if id > 0 { ids = append(ids, id) } diff --git a/routers/admin/users.go b/routers/admin/users.go index 06c391b8e0..2ea496624b 100644 --- a/routers/admin/users.go +++ b/routers/admin/users.go @@ -6,6 +6,8 @@ package admin import ( + "fmt" + "strconv" "strings" "code.gitea.io/gitea/models" @@ -17,8 +19,6 @@ import ( "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/routers" "code.gitea.io/gitea/services/mailer" - - "github.com/unknwon/com" ) const ( @@ -92,8 +92,9 @@ func NewUserPost(ctx *context.Context, form auth.AdminCreateUserForm) { if len(form.LoginType) > 0 { fields := strings.Split(form.LoginType, "-") if len(fields) == 2 { - u.LoginType = models.LoginType(com.StrTo(fields[0]).MustInt()) - u.LoginSource = com.StrTo(fields[1]).MustInt64() + lType, _ := strconv.ParseInt(fields[0], 10, 0) + u.LoginType = models.LoginType(lType) + u.LoginSource, _ = strconv.ParseInt(fields[1], 10, 64) u.LoginName = form.LoginName } } @@ -154,7 +155,7 @@ func NewUserPost(ctx *context.Context, form auth.AdminCreateUserForm) { } ctx.Flash.Success(ctx.Tr("admin.users.new_success", u.Name)) - ctx.Redirect(setting.AppSubURL + "/admin/users/" + com.ToStr(u.ID)) + ctx.Redirect(setting.AppSubURL + "/admin/users/" + fmt.Sprint(u.ID)) } func prepareUserInfo(ctx *context.Context) *models.User { @@ -220,12 +221,12 @@ func EditUserPost(ctx *context.Context, form auth.AdminEditUserForm) { fields := strings.Split(form.LoginType, "-") if len(fields) == 2 { - loginType := models.LoginType(com.StrTo(fields[0]).MustInt()) - loginSource := com.StrTo(fields[1]).MustInt64() + loginType, _ := strconv.ParseInt(fields[0], 10, 0) + loginSource, _ := strconv.ParseInt(fields[1], 10, 64) if u.LoginSource != loginSource { u.LoginSource = loginSource - u.LoginType = loginType + u.LoginType = models.LoginType(loginType) } } diff --git a/routers/api/v1/user/user.go b/routers/api/v1/user/user.go index 07d5e9112b..b860219e62 100644 --- a/routers/api/v1/user/user.go +++ b/routers/api/v1/user/user.go @@ -15,8 +15,6 @@ import ( "code.gitea.io/gitea/modules/convert" api "code.gitea.io/gitea/modules/structs" "code.gitea.io/gitea/routers/api/v1/utils" - - "github.com/unknwon/com" ) // Search search users @@ -61,7 +59,7 @@ func Search(ctx *context.APIContext) { opts := &models.SearchUserOptions{ Keyword: strings.Trim(ctx.Query("q"), " "), - UID: com.StrTo(ctx.Query("uid")).MustInt64(), + UID: ctx.QueryInt64("uid"), Type: models.UserTypeIndividual, ListOptions: listOptions, } diff --git a/routers/api/v1/utils/hook.go b/routers/api/v1/utils/hook.go index 8decc5cf43..b0ce40b9fb 100644 --- a/routers/api/v1/utils/hook.go +++ b/routers/api/v1/utils/hook.go @@ -14,10 +14,9 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/convert" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/routers/utils" "code.gitea.io/gitea/services/webhook" - - "github.com/unknwon/com" ) // GetOrgHook get an organization's webhook. If there is an error, write to @@ -89,11 +88,11 @@ func AddRepoHook(ctx *context.APIContext, form *api.CreateHookOption) { } func issuesHook(events []string, event string) bool { - return com.IsSliceContainsStr(events, event) || com.IsSliceContainsStr(events, string(models.HookEventIssues)) + return util.IsStringInSlice(event, events, true) || util.IsStringInSlice(string(models.HookEventIssues), events, true) } func pullHook(events []string, event string) bool { - return com.IsSliceContainsStr(events, event) || com.IsSliceContainsStr(events, string(models.HookEventPullRequest)) + return util.IsStringInSlice(event, events, true) || util.IsStringInSlice(string(models.HookEventPullRequest), events, true) } // addHook add the hook specified by `form`, `orgID` and `repoID`. If there is @@ -112,15 +111,15 @@ func addHook(ctx *context.APIContext, form *api.CreateHookOption, orgID, repoID HookEvent: &models.HookEvent{ ChooseEvents: true, HookEvents: models.HookEvents{ - Create: com.IsSliceContainsStr(form.Events, string(models.HookEventCreate)), - Delete: com.IsSliceContainsStr(form.Events, string(models.HookEventDelete)), - Fork: com.IsSliceContainsStr(form.Events, string(models.HookEventFork)), + Create: util.IsStringInSlice(string(models.HookEventCreate), form.Events, true), + Delete: util.IsStringInSlice(string(models.HookEventDelete), form.Events, true), + Fork: util.IsStringInSlice(string(models.HookEventFork), form.Events, true), Issues: issuesHook(form.Events, "issues_only"), IssueAssign: issuesHook(form.Events, string(models.HookEventIssueAssign)), IssueLabel: issuesHook(form.Events, string(models.HookEventIssueLabel)), IssueMilestone: issuesHook(form.Events, string(models.HookEventIssueMilestone)), IssueComment: issuesHook(form.Events, string(models.HookEventIssueComment)), - Push: com.IsSliceContainsStr(form.Events, string(models.HookEventPush)), + Push: util.IsStringInSlice(string(models.HookEventPush), form.Events, true), PullRequest: pullHook(form.Events, "pull_request_only"), PullRequestAssign: pullHook(form.Events, string(models.HookEventPullRequestAssign)), PullRequestLabel: pullHook(form.Events, string(models.HookEventPullRequestLabel)), @@ -128,8 +127,8 @@ func addHook(ctx *context.APIContext, form *api.CreateHookOption, orgID, repoID PullRequestComment: pullHook(form.Events, string(models.HookEventPullRequestComment)), PullRequestReview: pullHook(form.Events, "pull_request_review"), PullRequestSync: pullHook(form.Events, string(models.HookEventPullRequestSync)), - Repository: com.IsSliceContainsStr(form.Events, string(models.HookEventRepository)), - Release: com.IsSliceContainsStr(form.Events, string(models.HookEventRelease)), + Repository: util.IsStringInSlice(string(models.HookEventRepository), form.Events, true), + Release: util.IsStringInSlice(string(models.HookEventRelease), form.Events, true), }, BranchFilter: form.BranchFilter, }, @@ -244,18 +243,18 @@ func editHook(ctx *context.APIContext, form *api.EditHookOption, w *models.Webho w.PushOnly = false w.SendEverything = false w.ChooseEvents = true - w.Create = com.IsSliceContainsStr(form.Events, string(models.HookEventCreate)) - w.Push = com.IsSliceContainsStr(form.Events, string(models.HookEventPush)) - w.PullRequest = com.IsSliceContainsStr(form.Events, string(models.HookEventPullRequest)) - w.Create = com.IsSliceContainsStr(form.Events, string(models.HookEventCreate)) - w.Delete = com.IsSliceContainsStr(form.Events, string(models.HookEventDelete)) - w.Fork = com.IsSliceContainsStr(form.Events, string(models.HookEventFork)) - w.Issues = com.IsSliceContainsStr(form.Events, string(models.HookEventIssues)) - w.IssueComment = com.IsSliceContainsStr(form.Events, string(models.HookEventIssueComment)) - w.Push = com.IsSliceContainsStr(form.Events, string(models.HookEventPush)) - w.PullRequest = com.IsSliceContainsStr(form.Events, string(models.HookEventPullRequest)) - w.Repository = com.IsSliceContainsStr(form.Events, string(models.HookEventRepository)) - w.Release = com.IsSliceContainsStr(form.Events, string(models.HookEventRelease)) + w.Create = util.IsStringInSlice(string(models.HookEventCreate), form.Events, true) + w.Push = util.IsStringInSlice(string(models.HookEventPush), form.Events, true) + w.PullRequest = util.IsStringInSlice(string(models.HookEventPullRequest), form.Events, true) + w.Create = util.IsStringInSlice(string(models.HookEventCreate), form.Events, true) + w.Delete = util.IsStringInSlice(string(models.HookEventDelete), form.Events, true) + w.Fork = util.IsStringInSlice(string(models.HookEventFork), form.Events, true) + w.Issues = util.IsStringInSlice(string(models.HookEventIssues), form.Events, true) + w.IssueComment = util.IsStringInSlice(string(models.HookEventIssueComment), form.Events, true) + w.Push = util.IsStringInSlice(string(models.HookEventPush), form.Events, true) + w.PullRequest = util.IsStringInSlice(string(models.HookEventPullRequest), form.Events, true) + w.Repository = util.IsStringInSlice(string(models.HookEventRepository), form.Events, true) + w.Release = util.IsStringInSlice(string(models.HookEventRelease), form.Events, true) w.BranchFilter = form.BranchFilter if err := w.UpdateEvent(); err != nil { diff --git a/routers/install.go b/routers/install.go index 88786efb95..50e929b6f3 100644 --- a/routers/install.go +++ b/routers/install.go @@ -5,6 +5,7 @@ package routers import ( + "fmt" "net/http" "os" "os/exec" @@ -22,7 +23,6 @@ import ( "code.gitea.io/gitea/modules/user" "code.gitea.io/gitea/modules/util" - "github.com/unknwon/com" "gopkg.in/ini.v1" ) @@ -294,7 +294,7 @@ func InstallPost(ctx *context.Context, form auth.InstallForm) { cfg.Section("server").Key("DISABLE_SSH").SetValue("true") } else { cfg.Section("server").Key("DISABLE_SSH").SetValue("false") - cfg.Section("server").Key("SSH_PORT").SetValue(com.ToStr(form.SSHPort)) + cfg.Section("server").Key("SSH_PORT").SetValue(fmt.Sprint(form.SSHPort)) } if form.LFSRootPath != "" { @@ -319,22 +319,22 @@ func InstallPost(ctx *context.Context, form auth.InstallForm) { } else { cfg.Section("mailer").Key("ENABLED").SetValue("false") } - cfg.Section("service").Key("REGISTER_EMAIL_CONFIRM").SetValue(com.ToStr(form.RegisterConfirm)) - cfg.Section("service").Key("ENABLE_NOTIFY_MAIL").SetValue(com.ToStr(form.MailNotify)) - - cfg.Section("server").Key("OFFLINE_MODE").SetValue(com.ToStr(form.OfflineMode)) - cfg.Section("picture").Key("DISABLE_GRAVATAR").SetValue(com.ToStr(form.DisableGravatar)) - cfg.Section("picture").Key("ENABLE_FEDERATED_AVATAR").SetValue(com.ToStr(form.EnableFederatedAvatar)) - cfg.Section("openid").Key("ENABLE_OPENID_SIGNIN").SetValue(com.ToStr(form.EnableOpenIDSignIn)) - cfg.Section("openid").Key("ENABLE_OPENID_SIGNUP").SetValue(com.ToStr(form.EnableOpenIDSignUp)) - cfg.Section("service").Key("DISABLE_REGISTRATION").SetValue(com.ToStr(form.DisableRegistration)) - cfg.Section("service").Key("ALLOW_ONLY_EXTERNAL_REGISTRATION").SetValue(com.ToStr(form.AllowOnlyExternalRegistration)) - cfg.Section("service").Key("ENABLE_CAPTCHA").SetValue(com.ToStr(form.EnableCaptcha)) - cfg.Section("service").Key("REQUIRE_SIGNIN_VIEW").SetValue(com.ToStr(form.RequireSignInView)) - cfg.Section("service").Key("DEFAULT_KEEP_EMAIL_PRIVATE").SetValue(com.ToStr(form.DefaultKeepEmailPrivate)) - cfg.Section("service").Key("DEFAULT_ALLOW_CREATE_ORGANIZATION").SetValue(com.ToStr(form.DefaultAllowCreateOrganization)) - cfg.Section("service").Key("DEFAULT_ENABLE_TIMETRACKING").SetValue(com.ToStr(form.DefaultEnableTimetracking)) - cfg.Section("service").Key("NO_REPLY_ADDRESS").SetValue(com.ToStr(form.NoReplyAddress)) + cfg.Section("service").Key("REGISTER_EMAIL_CONFIRM").SetValue(fmt.Sprint(form.RegisterConfirm)) + cfg.Section("service").Key("ENABLE_NOTIFY_MAIL").SetValue(fmt.Sprint(form.MailNotify)) + + cfg.Section("server").Key("OFFLINE_MODE").SetValue(fmt.Sprint(form.OfflineMode)) + cfg.Section("picture").Key("DISABLE_GRAVATAR").SetValue(fmt.Sprint(form.DisableGravatar)) + cfg.Section("picture").Key("ENABLE_FEDERATED_AVATAR").SetValue(fmt.Sprint(form.EnableFederatedAvatar)) + cfg.Section("openid").Key("ENABLE_OPENID_SIGNIN").SetValue(fmt.Sprint(form.EnableOpenIDSignIn)) + cfg.Section("openid").Key("ENABLE_OPENID_SIGNUP").SetValue(fmt.Sprint(form.EnableOpenIDSignUp)) + cfg.Section("service").Key("DISABLE_REGISTRATION").SetValue(fmt.Sprint(form.DisableRegistration)) + cfg.Section("service").Key("ALLOW_ONLY_EXTERNAL_REGISTRATION").SetValue(fmt.Sprint(form.AllowOnlyExternalRegistration)) + cfg.Section("service").Key("ENABLE_CAPTCHA").SetValue(fmt.Sprint(form.EnableCaptcha)) + cfg.Section("service").Key("REQUIRE_SIGNIN_VIEW").SetValue(fmt.Sprint(form.RequireSignInView)) + cfg.Section("service").Key("DEFAULT_KEEP_EMAIL_PRIVATE").SetValue(fmt.Sprint(form.DefaultKeepEmailPrivate)) + cfg.Section("service").Key("DEFAULT_ALLOW_CREATE_ORGANIZATION").SetValue(fmt.Sprint(form.DefaultAllowCreateOrganization)) + cfg.Section("service").Key("DEFAULT_ENABLE_TIMETRACKING").SetValue(fmt.Sprint(form.DefaultEnableTimetracking)) + cfg.Section("service").Key("NO_REPLY_ADDRESS").SetValue(fmt.Sprint(form.NoReplyAddress)) cfg.Section("").Key("RUN_MODE").SetValue("prod") diff --git a/routers/org/members.go b/routers/org/members.go index 9f13d1be3f..00ca381ad0 100644 --- a/routers/org/members.go +++ b/routers/org/members.go @@ -11,8 +11,6 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" - - "github.com/unknwon/com" ) const ( @@ -70,7 +68,7 @@ func Members(ctx *context.Context) { // MembersAction response for operation to a member of organization func MembersAction(ctx *context.Context) { - uid := com.StrTo(ctx.Query("uid")).MustInt64() + uid := ctx.QueryInt64("uid") if uid == 0 { ctx.Redirect(ctx.Org.OrgLink + "/members") return diff --git a/routers/org/teams.go b/routers/org/teams.go index 03fbf068da..fa98add601 100644 --- a/routers/org/teams.go +++ b/routers/org/teams.go @@ -16,8 +16,6 @@ import ( "code.gitea.io/gitea/modules/context" "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/routers/utils" - - "github.com/unknwon/com" ) const ( @@ -50,7 +48,7 @@ func Teams(ctx *context.Context) { // TeamsAction response for join, leave, remove, add operations to team func TeamsAction(ctx *context.Context) { - uid := com.StrTo(ctx.Query("uid")).MustInt64() + uid := ctx.QueryInt64("uid") if uid == 0 { ctx.Redirect(ctx.Org.OrgLink + "/teams") return @@ -155,7 +153,7 @@ func TeamsRepoAction(ctx *context.Context) { } err = ctx.Org.Team.AddRepository(repo) case "remove": - err = ctx.Org.Team.RemoveRepository(com.StrTo(ctx.Query("repoid")).MustInt64()) + err = ctx.Org.Team.RemoveRepository(ctx.QueryInt64("repoid")) case "addall": err = ctx.Org.Team.AddAllRepositories() case "removeall": diff --git a/routers/repo/issue.go b/routers/repo/issue.go index f1336ac791..1d8d9c0366 100644 --- a/routers/repo/issue.go +++ b/routers/repo/issue.go @@ -114,7 +114,7 @@ func issues(ctx *context.Context, milestoneID, projectID int64, isPullOption uti viewType := ctx.Query("type") sortType := ctx.Query("sort") types := []string{"all", "your_repositories", "assigned", "created_by", "mentioned"} - if !com.IsSliceContainsStr(types, viewType) { + if !util.IsStringInSlice(viewType, types, true) { viewType = "all" } @@ -981,7 +981,7 @@ func NewIssuePost(ctx *context.Context, form auth.CreateIssueForm) { } log.Trace("Issue created: %d/%d", repo.ID, issue.ID) - ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + fmt.Sprint(issue.Index)) } // commentTag returns the CommentTag for a comment in/with the given repo, poster and issue @@ -1061,10 +1061,10 @@ func ViewIssue(ctx *context.Context) { // Make sure type and URL matches. if ctx.Params(":type") == "issues" && issue.IsPull { - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) return } else if ctx.Params(":type") == "pulls" && !issue.IsPull { - ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + fmt.Sprint(issue.Index)) return } @@ -1411,7 +1411,7 @@ func ViewIssue(ctx *context.Context) { log.Error("IsProtectedBranch: %v", err) } else if !protected { canDelete = true - ctx.Data["DeleteBranchLink"] = ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index) + "/cleanup" + ctx.Data["DeleteBranchLink"] = ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index) + "/cleanup" } } } diff --git a/routers/repo/lfs.go b/routers/repo/lfs.go index c74b088e2e..dc3ab4f54c 100644 --- a/routers/repo/lfs.go +++ b/routers/repo/lfs.go @@ -26,8 +26,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "code.gitea.io/gitea/modules/storage" - - "github.com/unknwon/com" ) const ( @@ -579,7 +577,7 @@ func LFSAutoAssociate(ctx *context.Context) { } var err error metas[i] = &models.LFSMetaObject{} - metas[i].Size, err = com.StrTo(oid[idx+1:]).Int64() + metas[i].Size, err = strconv.ParseInt(oid[idx+1:], 10, 64) if err != nil { ctx.ServerError("LFSAutoAssociate", fmt.Errorf("Illegal oid input: %s %v", oid, err)) return diff --git a/routers/repo/pull.go b/routers/repo/pull.go index b3a1478884..1594e9a9c4 100644 --- a/routers/repo/pull.go +++ b/routers/repo/pull.go @@ -31,8 +31,6 @@ import ( "code.gitea.io/gitea/services/gitdiff" pull_service "code.gitea.io/gitea/services/pull" repo_service "code.gitea.io/gitea/services/repository" - - "github.com/unknwon/com" ) const ( @@ -732,7 +730,7 @@ func UpdatePullRequest(ctx *context.Context) { // ToDo: add check if maintainers are allowed to change branch ... (need migration & co) if !allowedUpdate { ctx.Flash.Error(ctx.Tr("repo.pulls.update_not_allowed")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) return } @@ -752,18 +750,18 @@ func UpdatePullRequest(ctx *context.Context) { return } ctx.Flash.Error(flashError) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) return } ctx.Flash.Error(err.Error()) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) return } time.Sleep(1 * time.Second) ctx.Flash.Success(ctx.Tr("repo.pulls.update_branch_success")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) } // MergePullRequest response for merging pull request @@ -775,11 +773,11 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { if issue.IsClosed { if issue.IsPull { ctx.Flash.Error(ctx.Tr("repo.pulls.is_closed")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) return } ctx.Flash.Error(ctx.Tr("repo.issues.closed_title")) - ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/issues/" + fmt.Sprint(issue.Index)) return } @@ -792,25 +790,25 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { } if !allowedMerge { ctx.Flash.Error(ctx.Tr("repo.pulls.update_not_allowed")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) return } if !pr.CanAutoMerge() { ctx.Flash.Error(ctx.Tr("repo.pulls.no_merge_not_ready")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) return } if pr.HasMerged { ctx.Flash.Error(ctx.Tr("repo.pulls.has_merged")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(issue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(issue.Index)) return } if pr.IsWorkInProgress() { ctx.Flash.Error(ctx.Tr("repo.pulls.no_merge_wip")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } @@ -824,14 +822,14 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { return } else if !isRepoAdmin { ctx.Flash.Error(ctx.Tr("repo.pulls.no_merge_not_ready")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } } if ctx.HasError() { ctx.Flash.Error(ctx.Data["ErrorMsg"].(string)) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } @@ -863,14 +861,14 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { if !noDeps { ctx.Flash.Error(ctx.Tr("repo.issues.dependency.pr_close_blocked")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } if err = pull_service.Merge(pr, ctx.User, ctx.Repo.GitRepo, models.MergeStyle(form.Do), message); err != nil { if models.IsErrInvalidMergeStyle(err) { ctx.Flash.Error(ctx.Tr("repo.pulls.invalid_merge_option")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } else if models.IsErrMergeConflicts(err) { conflictError := err.(models.ErrMergeConflicts) @@ -884,7 +882,7 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { return } ctx.Flash.Error(flashError) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } else if models.IsErrRebaseConflicts(err) { conflictError := err.(models.ErrRebaseConflicts) @@ -898,17 +896,17 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { return } ctx.Flash.Error(flashError) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } else if models.IsErrMergeUnrelatedHistories(err) { log.Debug("MergeUnrelatedHistories error: %v", err) ctx.Flash.Error(ctx.Tr("repo.pulls.unrelated_histories")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } else if git.IsErrPushOutOfDate(err) { log.Debug("MergePushOutOfDate error: %v", err) ctx.Flash.Error(ctx.Tr("repo.pulls.merge_out_of_date")) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } else if git.IsErrPushRejected(err) { log.Debug("MergePushRejected error: %v", err) @@ -928,7 +926,7 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { } ctx.Flash.Error(flashError) } - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) return } ctx.ServerError("Merge", err) @@ -941,7 +939,7 @@ func MergePullRequest(ctx *context.Context, form auth.MergePullRequestForm) { } log.Trace("Pull request merged: %d", pr.ID) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pr.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pr.Index)) } func stopTimerIfAvailable(user *models.User, issue *models.Issue) error { @@ -1052,7 +1050,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) } ctx.Flash.Error(flashError) } - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pullIssue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pullIssue.Index)) return } ctx.ServerError("NewPullRequest", err) @@ -1060,7 +1058,7 @@ func CompareAndPullRequestPost(ctx *context.Context, form auth.CreateIssueForm) } log.Trace("Pull request created: %d/%d", repo.ID, pullIssue.ID) - ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + com.ToStr(pullIssue.Index)) + ctx.Redirect(ctx.Repo.RepoLink + "/pulls/" + fmt.Sprint(pullIssue.Index)) } // TriggerTask response for a trigger task request @@ -1159,7 +1157,7 @@ func CleanUpPullRequest(ctx *context.Context) { defer func() { ctx.JSON(200, map[string]interface{}{ - "redirect": pr.BaseRepo.Link() + "/pulls/" + com.ToStr(issue.Index), + "redirect": pr.BaseRepo.Link() + "/pulls/" + fmt.Sprint(issue.Index), }) }() diff --git a/routers/repo/webhook.go b/routers/repo/webhook.go index 49aec8184b..0c3fd1267d 100644 --- a/routers/repo/webhook.go +++ b/routers/repo/webhook.go @@ -20,9 +20,8 @@ import ( "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/setting" api "code.gitea.io/gitea/modules/structs" + "code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/services/webhook" - - "github.com/unknwon/com" ) const ( @@ -100,7 +99,7 @@ func getOrgRepoCtx(ctx *context.Context) (*orgRepoCtx, error) { func checkHookType(ctx *context.Context) string { hookType := strings.ToLower(ctx.Params(":type")) - if !com.IsSliceContainsStr(setting.Webhook.Types, hookType) { + if !util.IsStringInSlice(hookType, setting.Webhook.Types, true) { ctx.NotFound("checkHookType", nil) return "" } diff --git a/services/archiver/archiver_test.go b/services/archiver/archiver_test.go index 8a0f73bf9c..84bab14818 100644 --- a/services/archiver/archiver_test.go +++ b/services/archiver/archiver_test.go @@ -12,9 +12,9 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/test" + "code.gitea.io/gitea/modules/util" "github.com/stretchr/testify/assert" - "github.com/unknwon/com" ) var queueMutex sync.Mutex @@ -144,7 +144,9 @@ func TestArchive_Basic(t *testing.T) { for _, req := range inFlight { assert.True(t, req.IsComplete()) - assert.True(t, com.IsExist(req.GetArchivePath())) + exist, err := util.IsExist(req.GetArchivePath()) + assert.NoError(t, err) + assert.True(t, exist) } arbitraryReq := inFlight[0] diff --git a/services/mirror/mirror.go b/services/mirror/mirror.go index 7c3d0d2239..a2acb6f363 100644 --- a/services/mirror/mirror.go +++ b/services/mirror/mirror.go @@ -8,6 +8,7 @@ import ( "context" "fmt" "net/url" + "strconv" "strings" "time" @@ -22,8 +23,6 @@ import ( "code.gitea.io/gitea/modules/sync" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" - - "github.com/unknwon/com" ) // mirrorQueue holds an UniqueQueue object of the mirror @@ -396,11 +395,11 @@ func syncMirror(repoID string) { }() mirrorQueue.Remove(repoID) - m, err := models.GetMirrorByRepoID(com.StrTo(repoID).MustInt64()) + id, _ := strconv.ParseInt(repoID, 10, 64) + m, err := models.GetMirrorByRepoID(id) if err != nil { log.Error("GetMirrorByRepoID [%s]: %v", repoID, err) return - } log.Trace("SyncMirrors [repo: %-v]: Running Sync", m.Repo) diff --git a/services/pull/check.go b/services/pull/check.go index 8665b3e7df..5acee8174b 100644 --- a/services/pull/check.go +++ b/services/pull/check.go @@ -21,8 +21,6 @@ import ( "code.gitea.io/gitea/modules/queue" "code.gitea.io/gitea/modules/timeutil" "code.gitea.io/gitea/modules/util" - - "github.com/unknwon/com" ) // prQueue represents a queue to handle update pull request tests @@ -203,14 +201,13 @@ func InitializePullRequests(ctx context.Context) { // handle passed PR IDs and test the PRs func handle(data ...queue.Data) { for _, datum := range data { - prID := datum.(string) - id := com.StrTo(prID).MustInt64() + id, _ := strconv.ParseInt(datum.(string), 10, 64) log.Trace("Testing PR ID %d from the pull requests patch checking queue", id) pr, err := models.GetPullRequestByID(id) if err != nil { - log.Error("GetPullRequestByID[%s]: %v", prID, err) + log.Error("GetPullRequestByID[%s]: %v", datum, err) continue } else if pr.HasMerged { continue diff --git a/services/pull/check_test.go b/services/pull/check_test.go index 1bddc0b592..33a230e5ab 100644 --- a/services/pull/check_test.go +++ b/services/pull/check_test.go @@ -15,7 +15,6 @@ import ( "code.gitea.io/gitea/modules/queue" "github.com/stretchr/testify/assert" - "github.com/unknwon/com" ) func TestPullRequest_AddToTaskQueue(t *testing.T) { @@ -25,8 +24,7 @@ func TestPullRequest_AddToTaskQueue(t *testing.T) { q, err := queue.NewChannelUniqueQueue(func(data ...queue.Data) { for _, datum := range data { - prID := datum.(string) - id := com.StrTo(prID).MustInt64() + id, _ := strconv.ParseInt(datum.(string), 10, 64) idChan <- id } }, queue.ChannelUniqueQueueConfiguration{ diff --git a/services/pull/pull.go b/services/pull/pull.go index 99db078420..476c5dad54 100644 --- a/services/pull/pull.go +++ b/services/pull/pull.go @@ -21,8 +21,6 @@ import ( "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/setting" issue_service "code.gitea.io/gitea/services/issue" - - "github.com/unknwon/com" ) // NewPullRequest creates new pull request with labels for repository. @@ -326,7 +324,7 @@ func checkIfPRContentChanged(pr *models.PullRequest, oldCommitID, newCommitID st defer headGitRepo.Close() // Add a temporary remote. - tmpRemote := "checkIfPRContentChanged-" + com.ToStr(time.Now().UnixNano()) + tmpRemote := "checkIfPRContentChanged-" + fmt.Sprint(time.Now().UnixNano()) if err = headGitRepo.AddRemote(tmpRemote, pr.BaseRepo.RepoPath(), true); err != nil { return false, fmt.Errorf("AddRemote: %s/%s-%s: %v", pr.HeadRepo.OwnerName, pr.HeadRepo.Name, tmpRemote, err) } diff --git a/services/repository/transfer.go b/services/repository/transfer.go index d34c812b86..e2416cf8de 100644 --- a/services/repository/transfer.go +++ b/services/repository/transfer.go @@ -10,8 +10,6 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/sync" - - "github.com/unknwon/com" ) // repoWorkingPool represents a working pool to order the parallel changes to the same repository @@ -30,12 +28,12 @@ func TransferOwnership(doer, newOwner *models.User, repo *models.Repository, tea oldOwner := repo.Owner - repoWorkingPool.CheckIn(com.ToStr(repo.ID)) + repoWorkingPool.CheckIn(fmt.Sprint(repo.ID)) if err := models.TransferOwnership(doer, newOwner.Name, repo); err != nil { - repoWorkingPool.CheckOut(com.ToStr(repo.ID)) + repoWorkingPool.CheckOut(fmt.Sprint(repo.ID)) return err } - repoWorkingPool.CheckOut(com.ToStr(repo.ID)) + repoWorkingPool.CheckOut(fmt.Sprint(repo.ID)) newRepo, err := models.GetRepositoryByID(repo.ID) if err != nil { @@ -61,12 +59,12 @@ func ChangeRepositoryName(doer *models.User, repo *models.Repository, newRepoNam // repo so that we can atomically rename the repo path and updates the // local copy's origin accordingly. - repoWorkingPool.CheckIn(com.ToStr(repo.ID)) + repoWorkingPool.CheckIn(fmt.Sprint(repo.ID)) if err := models.ChangeRepositoryName(doer, repo, newRepoName); err != nil { - repoWorkingPool.CheckOut(com.ToStr(repo.ID)) + repoWorkingPool.CheckOut(fmt.Sprint(repo.ID)) return err } - repoWorkingPool.CheckOut(com.ToStr(repo.ID)) + repoWorkingPool.CheckOut(fmt.Sprint(repo.ID)) notification.NotifyRenameRepository(doer, repo, oldRepoName) diff --git a/services/repository/transfer_test.go b/services/repository/transfer_test.go index 9468e1ced2..052b8c9954 100644 --- a/services/repository/transfer_test.go +++ b/services/repository/transfer_test.go @@ -11,9 +11,9 @@ import ( "code.gitea.io/gitea/models" "code.gitea.io/gitea/modules/notification" "code.gitea.io/gitea/modules/notification/action" + "code.gitea.io/gitea/modules/util" "github.com/stretchr/testify/assert" - "github.com/unknwon/com" ) var notifySync sync.Once @@ -37,8 +37,12 @@ func TestTransferOwnership(t *testing.T) { transferredRepo := models.AssertExistsAndLoadBean(t, &models.Repository{ID: 3}).(*models.Repository) assert.EqualValues(t, 2, transferredRepo.OwnerID) - assert.False(t, com.IsExist(models.RepoPath("user3", "repo3"))) - assert.True(t, com.IsExist(models.RepoPath("user2", "repo3"))) + exist, err := util.IsExist(models.RepoPath("user3", "repo3")) + assert.NoError(t, err) + assert.False(t, exist) + exist, err = util.IsExist(models.RepoPath("user2", "repo3")) + assert.NoError(t, err) + assert.True(t, exist) models.AssertExistsAndLoadBean(t, &models.Action{ OpType: models.ActionTransferRepo, ActUserID: 2, diff --git a/services/webhook/deliver.go b/services/webhook/deliver.go index 5b6c38f148..44c1a18b6c 100644 --- a/services/webhook/deliver.go +++ b/services/webhook/deliver.go @@ -12,6 +12,7 @@ import ( "net" "net/http" "net/url" + "strconv" "strings" "sync" "time" @@ -21,7 +22,6 @@ import ( "code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/setting" "github.com/gobwas/glob" - "github.com/unknwon/com" ) // Deliver deliver hook task @@ -201,7 +201,7 @@ func DeliverHooks(ctx context.Context) { log.Trace("DeliverHooks [repo_id: %v]", repoIDStr) hookQueue.Remove(repoIDStr) - repoID, err := com.StrTo(repoIDStr).Int64() + repoID, err := strconv.ParseInt(repoIDStr, 10, 64) if err != nil { log.Error("Invalid repo ID: %s", repoIDStr) continue diff --git a/services/wiki/wiki.go b/services/wiki/wiki.go index 67ba1abd0f..75b9d1d1f5 100644 --- a/services/wiki/wiki.go +++ b/services/wiki/wiki.go @@ -17,8 +17,6 @@ import ( repo_module "code.gitea.io/gitea/modules/repository" "code.gitea.io/gitea/modules/sync" "code.gitea.io/gitea/modules/util" - - "github.com/unknwon/com" ) var ( @@ -88,8 +86,8 @@ func updateWikiPage(doer *models.User, repo *models.Repository, oldWikiName, new if err = nameAllowed(newWikiName); err != nil { return err } - wikiWorkingPool.CheckIn(com.ToStr(repo.ID)) - defer wikiWorkingPool.CheckOut(com.ToStr(repo.ID)) + wikiWorkingPool.CheckIn(fmt.Sprint(repo.ID)) + defer wikiWorkingPool.CheckOut(fmt.Sprint(repo.ID)) if err = InitWiki(repo); err != nil { return fmt.Errorf("InitWiki: %v", err) @@ -242,8 +240,8 @@ func EditWikiPage(doer *models.User, repo *models.Repository, oldWikiName, newWi // DeleteWikiPage deletes a wiki page identified by its path. func DeleteWikiPage(doer *models.User, repo *models.Repository, wikiName string) (err error) { - wikiWorkingPool.CheckIn(com.ToStr(repo.ID)) - defer wikiWorkingPool.CheckOut(com.ToStr(repo.ID)) + wikiWorkingPool.CheckIn(fmt.Sprint(repo.ID)) + defer wikiWorkingPool.CheckOut(fmt.Sprint(repo.ID)) if err = InitWiki(repo); err != nil { return fmt.Errorf("InitWiki: %v", err) |