summaryrefslogtreecommitdiffstats
path: root/modules/storage
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2023-03-22 04:02:49 +0800
committerGitHub <noreply@github.com>2023-03-21 16:02:49 -0400
commitce9dee5a1e8ae670c97621bca409d8cf43a90102 (patch)
tree6c9d8922dfae4bdcc1785340f2a866f805259988 /modules/storage
parent253a00aaac6b17346927e42c709f3f96672caaf3 (diff)
downloadgitea-ce9dee5a1e8ae670c97621bca409d8cf43a90102.tar.gz
gitea-ce9dee5a1e8ae670c97621bca409d8cf43a90102.zip
Introduce path Clean/Join helper functions (#23495)
Since #23493 has conflicts with latest commits, this PR is my proposal for fixing #23371 Details are in the comments And refactor the `modules/options` module, to make it always use "filepath" to access local files. Benefits: * No need to do `util.CleanPath(strings.ReplaceAll(p, "\\", "/"))), "/")` any more (not only one before) * The function behaviors are clearly defined
Diffstat (limited to 'modules/storage')
-rw-r--r--modules/storage/local.go17
-rw-r--r--modules/storage/local_test.go20
-rw-r--r--modules/storage/minio.go2
3 files changed, 21 insertions, 18 deletions
diff --git a/modules/storage/local.go b/modules/storage/local.go
index 15f5761e8f..d22974a65a 100644
--- a/modules/storage/local.go
+++ b/modules/storage/local.go
@@ -5,11 +5,11 @@ package storage
import (
"context"
+ "fmt"
"io"
"net/url"
"os"
"path/filepath"
- "strings"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/util"
@@ -41,13 +41,19 @@ func NewLocalStorage(ctx context.Context, cfg interface{}) (ObjectStorage, error
}
config := configInterface.(LocalStorageConfig)
+ if !filepath.IsAbs(config.Path) {
+ return nil, fmt.Errorf("LocalStorageConfig.Path should have been prepared by setting/storage.go and should be an absolute path, but not: %q", config.Path)
+ }
log.Info("Creating new Local Storage at %s", config.Path)
if err := os.MkdirAll(config.Path, os.ModePerm); err != nil {
return nil, err
}
if config.TemporaryPath == "" {
- config.TemporaryPath = config.Path + "/tmp"
+ config.TemporaryPath = filepath.Join(config.Path, "tmp")
+ }
+ if !filepath.IsAbs(config.TemporaryPath) {
+ return nil, fmt.Errorf("LocalStorageConfig.TemporaryPath should be an absolute path, but not: %q", config.TemporaryPath)
}
return &LocalStorage{
@@ -58,7 +64,7 @@ func NewLocalStorage(ctx context.Context, cfg interface{}) (ObjectStorage, error
}
func (l *LocalStorage) buildLocalPath(p string) string {
- return filepath.Join(l.dir, util.CleanPath(strings.ReplaceAll(p, "\\", "/")))
+ return util.FilePathJoinAbs(l.dir, p)
}
// Open a file
@@ -128,10 +134,7 @@ func (l *LocalStorage) URL(path, name string) (*url.URL, error) {
// IterateObjects iterates across the objects in the local storage
func (l *LocalStorage) IterateObjects(prefix string, fn func(path string, obj Object) error) error {
- dir := l.dir
- if prefix != "" {
- dir = filepath.Join(l.dir, util.CleanPath(prefix))
- }
+ dir := l.buildLocalPath(prefix)
return filepath.WalkDir(dir, func(path string, d os.DirEntry, err error) error {
if err != nil {
return err
diff --git a/modules/storage/local_test.go b/modules/storage/local_test.go
index 2b112df8f1..9649761a0f 100644
--- a/modules/storage/local_test.go
+++ b/modules/storage/local_test.go
@@ -20,29 +20,29 @@ func TestBuildLocalPath(t *testing.T) {
expected string
}{
{
- "a",
+ "/a",
"0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
- "a/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
+ "/a/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
},
{
- "a",
+ "/a",
"../0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
- "a/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
+ "/a/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
},
{
- "a",
+ "/a",
"0\\a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
- "a/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
+ "/a/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
},
{
- "b",
+ "/b",
"a/../0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
- "b/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
+ "/b/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
},
{
- "b",
+ "/b",
"a\\..\\0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
- "b/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
+ "/b/0/a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a14",
},
}
diff --git a/modules/storage/minio.go b/modules/storage/minio.go
index 8cc06bcdd3..5c67dbf26a 100644
--- a/modules/storage/minio.go
+++ b/modules/storage/minio.go
@@ -121,7 +121,7 @@ func NewMinioStorage(ctx context.Context, cfg interface{}) (ObjectStorage, error
}
func (m *MinioStorage) buildMinioPath(p string) string {
- return strings.TrimPrefix(path.Join(m.basePath, util.CleanPath(strings.ReplaceAll(p, "\\", "/"))), "/")
+ return util.PathJoinRelX(m.basePath, p)
}
// Open open a file