Merge 39006d3819a40b51bcb9360c7c3adb5f8e566016 into 490accf5d7d49138f0af806318826d92513b1395

This commit is contained in:
Saad 2024-05-07 13:12:32 +08:00 committed by GitHub
commit 7ecb6b882c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 28 additions and 10 deletions

6
fs.go
View File

@ -5,6 +5,7 @@
package gin package gin
import ( import (
"fmt"
"net/http" "net/http"
"os" "os"
) )
@ -29,11 +30,12 @@ func Dir(root string, listDirectory bool) http.FileSystem {
return &onlyFilesFS{fs} return &onlyFilesFS{fs}
} }
// Open conforms to http.Filesystem. // Open opens a file excluding directories.
// It conforms to http.Filesystem.
func (fs onlyFilesFS) Open(name string) (http.File, error) { func (fs onlyFilesFS) Open(name string) (http.File, error) {
f, err := fs.fs.Open(name) f, err := fs.fs.Open(name)
if err != nil { if err != nil {
return nil, err return nil, fmt.Errorf("failed to open file: %w", err)
} }
return neuteredReaddirFile{f}, nil return neuteredReaddirFile{f}, nil
} }

14
mode.go
View File

@ -6,6 +6,7 @@ package gin
import ( import (
"flag" "flag"
"fmt"
"io" "io"
"os" "os"
@ -53,8 +54,16 @@ func init() {
SetMode(mode) SetMode(mode)
} }
func init() {
mode := os.Getenv(EnvGinMode)
err := SetMode(mode)
if err != nil {
panic(err)
}
}
// SetMode sets gin mode according to input string. // SetMode sets gin mode according to input string.
func SetMode(value string) { func SetMode(value string) error {
if value == "" { if value == "" {
if flag.Lookup("test.v") != nil { if flag.Lookup("test.v") != nil {
value = TestMode value = TestMode
@ -71,10 +80,11 @@ func SetMode(value string) {
case TestMode: case TestMode:
ginMode = testCode ginMode = testCode
default: default:
panic("gin mode unknown: " + value + " (available mode: debug release test)") return fmt.Errorf("gin mode unknown: %s (available mode: debug release test)", value)
} }
modeName = value modeName = value
return nil
} }
// DisableBindValidation closes the default validator. // DisableBindValidation closes the default validator.

View File

@ -22,30 +22,36 @@ func TestSetMode(t *testing.T) {
assert.Equal(t, TestMode, Mode()) assert.Equal(t, TestMode, Mode())
os.Unsetenv(EnvGinMode) os.Unsetenv(EnvGinMode)
SetMode("") err := SetMode("")
assert.NoError(t, err)
assert.Equal(t, testCode, ginMode) assert.Equal(t, testCode, ginMode)
assert.Equal(t, TestMode, Mode()) assert.Equal(t, TestMode, Mode())
tmp := flag.CommandLine tmp := flag.CommandLine
flag.CommandLine = flag.NewFlagSet("", flag.ContinueOnError) flag.CommandLine = flag.NewFlagSet("", flag.ContinueOnError)
SetMode("") err = SetMode("")
assert.NoError(t, err)
assert.Equal(t, debugCode, ginMode) assert.Equal(t, debugCode, ginMode)
assert.Equal(t, DebugMode, Mode()) assert.Equal(t, DebugMode, Mode())
flag.CommandLine = tmp flag.CommandLine = tmp
SetMode(DebugMode) err = SetMode(DebugMode)
assert.NoError(t, err)
assert.Equal(t, debugCode, ginMode) assert.Equal(t, debugCode, ginMode)
assert.Equal(t, DebugMode, Mode()) assert.Equal(t, DebugMode, Mode())
SetMode(ReleaseMode) err = SetMode(ReleaseMode)
assert.NoError(t, err)
assert.Equal(t, releaseCode, ginMode) assert.Equal(t, releaseCode, ginMode)
assert.Equal(t, ReleaseMode, Mode()) assert.Equal(t, ReleaseMode, Mode())
SetMode(TestMode) err = SetMode(TestMode)
assert.NoError(t, err)
assert.Equal(t, testCode, ginMode) assert.Equal(t, testCode, ginMode)
assert.Equal(t, TestMode, Mode()) assert.Equal(t, TestMode, Mode())
assert.Panics(t, func() { SetMode("unknown") }) err = SetMode("unknown")
assert.Error(t, err)
} }
func TestDisableBindValidation(t *testing.T) { func TestDisableBindValidation(t *testing.T) {