Use filepath.Join instead of path.Join for file system file operations (#33978)

This commit is contained in:
Lunny Xiao
2025-03-24 14:50:28 -07:00
committed by GitHub
parent 82bc8b8ce6
commit 3fe449c21a
12 changed files with 23 additions and 56 deletions

View File

@ -10,7 +10,7 @@ import (
"io" "io"
"mime/multipart" "mime/multipart"
"os" "os"
"path" "path/filepath"
"code.gitea.io/gitea/models/db" "code.gitea.io/gitea/models/db"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
@ -53,7 +53,7 @@ func init() {
// UploadLocalPath returns where uploads is stored in local file system based on given UUID. // UploadLocalPath returns where uploads is stored in local file system based on given UUID.
func UploadLocalPath(uuid string) string { func UploadLocalPath(uuid string) string {
return path.Join(setting.Repository.Upload.TempPath, uuid[0:1], uuid[1:2], uuid) return filepath.Join(setting.Repository.Upload.TempPath, uuid[0:1], uuid[1:2], uuid)
} }
// LocalPath returns where uploads are temporarily stored in local file system. // LocalPath returns where uploads are temporarily stored in local file system.
@ -69,7 +69,7 @@ func NewUpload(ctx context.Context, name string, buf []byte, file multipart.File
} }
localPath := upload.LocalPath() localPath := upload.LocalPath()
if err = os.MkdirAll(path.Dir(localPath), os.ModePerm); err != nil { if err = os.MkdirAll(filepath.Dir(localPath), os.ModePerm); err != nil {
return nil, fmt.Errorf("MkdirAll: %w", err) return nil, fmt.Errorf("MkdirAll: %w", err)
} }

View File

@ -7,11 +7,9 @@ package git
import ( import (
"errors" "errors"
"os" "os"
"path"
"path/filepath" "path/filepath"
"strings" "strings"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/util" "code.gitea.io/gitea/modules/util"
) )
@ -51,7 +49,7 @@ func GetHook(repoPath, name string) (*Hook, error) {
} }
h := &Hook{ h := &Hook{
name: name, name: name,
path: path.Join(repoPath, "hooks", name+".d", name), path: filepath.Join(repoPath, "hooks", name+".d", name),
} }
samplePath := filepath.Join(repoPath, "hooks", name+".sample") samplePath := filepath.Join(repoPath, "hooks", name+".sample")
if isFile(h.path) { if isFile(h.path) {
@ -103,7 +101,7 @@ func (h *Hook) Update() error {
// ListHooks returns a list of Git hooks of given repository. // ListHooks returns a list of Git hooks of given repository.
func ListHooks(repoPath string) (_ []*Hook, err error) { func ListHooks(repoPath string) (_ []*Hook, err error) {
if !isDir(path.Join(repoPath, "hooks")) { if !isDir(filepath.Join(repoPath, "hooks")) {
return nil, errors.New("hooks path does not exist") return nil, errors.New("hooks path does not exist")
} }
@ -116,28 +114,3 @@ func ListHooks(repoPath string) (_ []*Hook, err error) {
} }
return hooks, nil return hooks, nil
} }
const (
// HookPathUpdate hook update path
HookPathUpdate = "hooks/update"
)
// SetUpdateHook writes given content to update hook of the repository.
func SetUpdateHook(repoPath, content string) (err error) {
log.Debug("Setting update hook: %s", repoPath)
hookPath := path.Join(repoPath, HookPathUpdate)
isExist, err := util.IsExist(hookPath)
if err != nil {
log.Debug("Unable to check if %s exists. Error: %v", hookPath, err)
return err
}
if isExist {
err = util.Remove(hookPath)
} else {
err = os.MkdirAll(path.Dir(hookPath), os.ModePerm)
}
if err != nil {
return err
}
return os.WriteFile(hookPath, []byte(content), 0o777)
}

View File

@ -8,7 +8,7 @@ package git
import ( import (
"os" "os"
"path" "path/filepath"
gitealog "code.gitea.io/gitea/modules/log" gitealog "code.gitea.io/gitea/modules/log"
@ -18,7 +18,7 @@ import (
// CommitNodeIndex returns the index for walking commit graph // CommitNodeIndex returns the index for walking commit graph
func (r *Repository) CommitNodeIndex() (cgobject.CommitNodeIndex, *os.File) { func (r *Repository) CommitNodeIndex() (cgobject.CommitNodeIndex, *os.File) {
indexPath := path.Join(r.Path, "objects", "info", "commit-graph") indexPath := filepath.Join(r.Path, "objects", "info", "commit-graph")
file, err := os.Open(indexPath) file, err := os.Open(indexPath)
if err == nil { if err == nil {

View File

@ -7,7 +7,6 @@ import (
"context" "context"
"fmt" "fmt"
"os" "os"
"path"
"path/filepath" "path/filepath"
"strings" "strings"
@ -72,7 +71,7 @@ func CheckDaemonExportOK(ctx context.Context, repo *repo_model.Repository) error
} }
// Create/Remove git-daemon-export-ok for git-daemon... // Create/Remove git-daemon-export-ok for git-daemon...
daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`) daemonExportFile := filepath.Join(repo.RepoPath(), `git-daemon-export-ok`)
isExist, err := util.IsExist(daemonExportFile) isExist, err := util.IsExist(daemonExportFile)
if err != nil { if err != nil {

View File

@ -6,7 +6,6 @@ package repository
import ( import (
"fmt" "fmt"
"os" "os"
"path"
"path/filepath" "path/filepath"
"code.gitea.io/gitea/modules/log" "code.gitea.io/gitea/modules/log"
@ -19,7 +18,7 @@ func LocalCopyPath() string {
if filepath.IsAbs(setting.Repository.Local.LocalCopyPath) { if filepath.IsAbs(setting.Repository.Local.LocalCopyPath) {
return setting.Repository.Local.LocalCopyPath return setting.Repository.Local.LocalCopyPath
} }
return path.Join(setting.AppDataPath, setting.Repository.Local.LocalCopyPath) return filepath.Join(setting.AppDataPath, setting.Repository.Local.LocalCopyPath)
} }
// CreateTemporaryPath creates a temporary path // CreateTemporaryPath creates a temporary path

View File

@ -7,7 +7,6 @@ import (
"fmt" "fmt"
golog "log" golog "log"
"os" "os"
"path"
"path/filepath" "path/filepath"
"strings" "strings"
@ -41,7 +40,7 @@ func loadLogGlobalFrom(rootCfg ConfigProvider) {
Log.BufferLen = sec.Key("BUFFER_LEN").MustInt(10000) Log.BufferLen = sec.Key("BUFFER_LEN").MustInt(10000)
Log.Mode = sec.Key("MODE").MustString("console") Log.Mode = sec.Key("MODE").MustString("console")
Log.RootPath = sec.Key("ROOT_PATH").MustString(path.Join(AppWorkPath, "log")) Log.RootPath = sec.Key("ROOT_PATH").MustString(filepath.Join(AppWorkPath, "log"))
if !filepath.IsAbs(Log.RootPath) { if !filepath.IsAbs(Log.RootPath) {
Log.RootPath = filepath.Join(AppWorkPath, Log.RootPath) Log.RootPath = filepath.Join(AppWorkPath, Log.RootPath)
} }

View File

@ -5,7 +5,6 @@ package setting
import ( import (
"os/exec" "os/exec"
"path"
"path/filepath" "path/filepath"
"strings" "strings"
@ -284,7 +283,7 @@ func loadRepositoryFrom(rootCfg ConfigProvider) {
Repository.GoGetCloneURLProtocol = sec.Key("GO_GET_CLONE_URL_PROTOCOL").MustString("https") Repository.GoGetCloneURLProtocol = sec.Key("GO_GET_CLONE_URL_PROTOCOL").MustString("https")
Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1) Repository.MaxCreationLimit = sec.Key("MAX_CREATION_LIMIT").MustInt(-1)
Repository.DefaultBranch = sec.Key("DEFAULT_BRANCH").MustString(Repository.DefaultBranch) Repository.DefaultBranch = sec.Key("DEFAULT_BRANCH").MustString(Repository.DefaultBranch)
RepoRootPath = sec.Key("ROOT").MustString(path.Join(AppDataPath, "gitea-repositories")) RepoRootPath = sec.Key("ROOT").MustString(filepath.Join(AppDataPath, "gitea-repositories"))
if !filepath.IsAbs(RepoRootPath) { if !filepath.IsAbs(RepoRootPath) {
RepoRootPath = filepath.Join(AppWorkPath, RepoRootPath) RepoRootPath = filepath.Join(AppWorkPath, RepoRootPath)
} else { } else {
@ -363,7 +362,7 @@ func loadRepositoryFrom(rootCfg ConfigProvider) {
} }
if !filepath.IsAbs(Repository.Upload.TempPath) { if !filepath.IsAbs(Repository.Upload.TempPath) {
Repository.Upload.TempPath = path.Join(AppWorkPath, Repository.Upload.TempPath) Repository.Upload.TempPath = filepath.Join(AppWorkPath, Repository.Upload.TempPath)
} }
if err := loadRepoArchiveFrom(rootCfg); err != nil { if err := loadRepoArchiveFrom(rootCfg); err != nil {

View File

@ -5,7 +5,6 @@ package setting
import ( import (
"os" "os"
"path"
"path/filepath" "path/filepath"
"strings" "strings"
"text/template" "text/template"
@ -111,7 +110,7 @@ func loadSSHFrom(rootCfg ConfigProvider) {
} }
homeDir = strings.ReplaceAll(homeDir, "\\", "/") homeDir = strings.ReplaceAll(homeDir, "\\", "/")
SSH.RootPath = path.Join(homeDir, ".ssh") SSH.RootPath = filepath.Join(homeDir, ".ssh")
serverCiphers := sec.Key("SSH_SERVER_CIPHERS").Strings(",") serverCiphers := sec.Key("SSH_SERVER_CIPHERS").Strings(",")
if len(serverCiphers) > 0 { if len(serverCiphers) > 0 {
SSH.ServerCiphers = serverCiphers SSH.ServerCiphers = serverCiphers

View File

@ -8,7 +8,7 @@ import (
"fmt" "fmt"
"os" "os"
"os/exec" "os/exec"
"path" "path/filepath"
"strings" "strings"
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
@ -148,7 +148,7 @@ func checkDaemonExport(ctx context.Context, logger log.Logger, autofix bool) err
} }
// Create/Remove git-daemon-export-ok for git-daemon... // Create/Remove git-daemon-export-ok for git-daemon...
daemonExportFile := path.Join(repo.RepoPath(), `git-daemon-export-ok`) daemonExportFile := filepath.Join(repo.RepoPath(), `git-daemon-export-ok`)
isExist, err := util.IsExist(daemonExportFile) isExist, err := util.IsExist(daemonExportFile)
if err != nil { if err != nil {
log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err) log.Error("Unable to check if %s exists. Error: %v", daemonExportFile, err)
@ -196,7 +196,7 @@ func checkCommitGraph(ctx context.Context, logger log.Logger, autofix bool) erro
commitGraphExists := func() (bool, error) { commitGraphExists := func() (bool, error) {
// Check commit-graph exists // Check commit-graph exists
commitGraphFile := path.Join(repo.RepoPath(), `objects/info/commit-graph`) commitGraphFile := filepath.Join(repo.RepoPath(), `objects/info/commit-graph`)
isExist, err := util.IsExist(commitGraphFile) isExist, err := util.IsExist(commitGraphFile)
if err != nil { if err != nil {
logger.Error("Unable to check if %s exists. Error: %v", commitGraphFile, err) logger.Error("Unable to check if %s exists. Error: %v", commitGraphFile, err)
@ -204,7 +204,7 @@ func checkCommitGraph(ctx context.Context, logger log.Logger, autofix bool) erro
} }
if !isExist { if !isExist {
commitGraphsDir := path.Join(repo.RepoPath(), `objects/info/commit-graphs`) commitGraphsDir := filepath.Join(repo.RepoPath(), `objects/info/commit-graphs`)
isExist, err = util.IsExist(commitGraphsDir) isExist, err = util.IsExist(commitGraphsDir)
if err != nil { if err != nil {
logger.Error("Unable to check if %s exists. Error: %v", commitGraphsDir, err) logger.Error("Unable to check if %s exists. Error: %v", commitGraphsDir, err)

View File

@ -71,7 +71,7 @@ func TestListUnadoptedRepositories_ListOptions(t *testing.T) {
username := "user2" username := "user2"
unadoptedList := []string{path.Join(username, "unadopted1"), path.Join(username, "unadopted2")} unadoptedList := []string{path.Join(username, "unadopted1"), path.Join(username, "unadopted2")}
for _, unadopted := range unadoptedList { for _, unadopted := range unadoptedList {
_ = os.Mkdir(path.Join(setting.RepoRootPath, unadopted+".git"), 0o755) _ = os.Mkdir(filepath.Join(setting.RepoRootPath, unadopted+".git"), 0o755)
} }
opts := db.ListOptions{Page: 1, PageSize: 1} opts := db.ListOptions{Page: 1, PageSize: 1}

View File

@ -10,7 +10,6 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"path"
"path/filepath" "path/filepath"
"strconv" "strconv"
"testing" "testing"
@ -35,12 +34,12 @@ func withKeyFile(t *testing.T, keyname string, callback func(string)) {
err = ssh.GenKeyPair(keyFile) err = ssh.GenKeyPair(keyFile)
assert.NoError(t, err) assert.NoError(t, err)
err = os.WriteFile(path.Join(tmpDir, "ssh"), []byte("#!/bin/bash\n"+ err = os.WriteFile(filepath.Join(tmpDir, "ssh"), []byte("#!/bin/bash\n"+
"ssh -o \"UserKnownHostsFile=/dev/null\" -o \"StrictHostKeyChecking=no\" -o \"IdentitiesOnly=yes\" -i \""+keyFile+"\" \"$@\""), 0o700) "ssh -o \"UserKnownHostsFile=/dev/null\" -o \"StrictHostKeyChecking=no\" -o \"IdentitiesOnly=yes\" -i \""+keyFile+"\" \"$@\""), 0o700)
assert.NoError(t, err) assert.NoError(t, err)
// Setup ssh wrapper // Setup ssh wrapper
t.Setenv("GIT_SSH", path.Join(tmpDir, "ssh")) t.Setenv("GIT_SSH", filepath.Join(tmpDir, "ssh"))
t.Setenv("GIT_SSH_COMMAND", t.Setenv("GIT_SSH_COMMAND",
"ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -i \""+keyFile+"\"") "ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o IdentitiesOnly=yes -i \""+keyFile+"\"")
t.Setenv("GIT_SSH_VARIANT", "ssh") t.Setenv("GIT_SSH_VARIANT", "ssh")

View File

@ -38,7 +38,7 @@ var currentEngine *xorm.Engine
func initMigrationTest(t *testing.T) func() { func initMigrationTest(t *testing.T) func() {
testlogger.Init() testlogger.Init()
giteaRoot := test.SetupGiteaRoot() giteaRoot := test.SetupGiteaRoot()
setting.AppPath = path.Join(giteaRoot, "gitea") setting.AppPath = filepath.Join(giteaRoot, "gitea")
if _, err := os.Stat(setting.AppPath); err != nil { if _, err := os.Stat(setting.AppPath); err != nil {
testlogger.Fatalf(fmt.Sprintf("Could not find gitea binary at %s\n", setting.AppPath)) testlogger.Fatalf(fmt.Sprintf("Could not find gitea binary at %s\n", setting.AppPath))
} }
@ -47,7 +47,7 @@ func initMigrationTest(t *testing.T) func() {
if giteaConf == "" { if giteaConf == "" {
testlogger.Fatalf("Environment variable $GITEA_CONF not set\n") testlogger.Fatalf("Environment variable $GITEA_CONF not set\n")
} else if !path.IsAbs(giteaConf) { } else if !path.IsAbs(giteaConf) {
setting.CustomConf = path.Join(giteaRoot, giteaConf) setting.CustomConf = filepath.Join(giteaRoot, giteaConf)
} else { } else {
setting.CustomConf = giteaConf setting.CustomConf = giteaConf
} }
@ -55,7 +55,7 @@ func initMigrationTest(t *testing.T) func() {
unittest.InitSettings() unittest.InitSettings()
assert.NotEmpty(t, setting.RepoRootPath) assert.NotEmpty(t, setting.RepoRootPath)
assert.NoError(t, unittest.SyncDirs(path.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath)) assert.NoError(t, unittest.SyncDirs(filepath.Join(filepath.Dir(setting.AppPath), "tests/gitea-repositories-meta"), setting.RepoRootPath))
assert.NoError(t, git.InitFull(t.Context())) assert.NoError(t, git.InitFull(t.Context()))
setting.LoadDBSetting() setting.LoadDBSetting()
setting.InitLoggersForTest() setting.InitLoggersForTest()