mirror of
https://github.com/go-gitea/gitea.git
synced 2026-08-11 17:08:45 +00:00
chore: enable forcetypeassert linter, fix issues (#38804)
Enable [`forcetypeassert`](https://github.com/gostaticanalysis/forcetypeassert) linter to prevent unchecked type assertions. ~650 issues fixed, most fixes were clean, some use `setting.PanicInDevOrTesting`. The only behaviour changes are where code would previously send a 500 error or panic, a 4xx error is now emitted. Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
@@ -21,7 +21,9 @@ func TestLockAndDo(t *testing.T) {
|
||||
locker := newTestRedisLocker(t)
|
||||
defaultLocker.Store(new(locker))
|
||||
testLockAndDo(t)
|
||||
require.NoError(t, locker.(*redisLocker).Close())
|
||||
rl, ok := locker.(*redisLocker)
|
||||
require.True(t, ok)
|
||||
require.NoError(t, rl.Close())
|
||||
})
|
||||
t.Run("memory", func(t *testing.T) {
|
||||
defaultLocker.Store(new(NewMemoryLocker()))
|
||||
|
||||
@@ -26,13 +26,17 @@ func TestLocker(t *testing.T) {
|
||||
defer test.MockVariableValue(&redisLockExpiry, 5*time.Second)() // make it shorter for testing
|
||||
locker := newTestRedisLocker(t)
|
||||
testLocker(t, locker)
|
||||
testRedisLocker(t, locker.(*redisLocker))
|
||||
require.NoError(t, locker.(*redisLocker).Close())
|
||||
rl, ok := locker.(*redisLocker)
|
||||
require.True(t, ok)
|
||||
testRedisLocker(t, rl)
|
||||
require.NoError(t, rl.Close())
|
||||
})
|
||||
t.Run("memory", func(t *testing.T) {
|
||||
locker := NewMemoryLocker()
|
||||
testLocker(t, locker)
|
||||
testMemoryLocker(t, locker.(*memoryLocker))
|
||||
ml, ok := locker.(*memoryLocker)
|
||||
require.True(t, ok)
|
||||
testMemoryLocker(t, ml)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -162,7 +166,8 @@ func testRedisLocker(t *testing.T, locker *redisLocker) {
|
||||
// It simulates that there are some problems with extending like network issues or redis server down.
|
||||
v, ok := locker.mutexM.Load("test")
|
||||
require.True(t, ok)
|
||||
m := v.(*redsync.Mutex)
|
||||
m, ok := v.(*redsync.Mutex)
|
||||
require.True(t, ok)
|
||||
_, _ = m.Unlock() // release it to make it impossible to extend
|
||||
|
||||
// In current design, callers can't know the lock can't be extended.
|
||||
|
||||
@@ -52,11 +52,10 @@ func (l *redisLocker) Lock(ctx context.Context, key string) (ReleaseFunc, error)
|
||||
func (l *redisLocker) TryLock(ctx context.Context, key string) (bool, ReleaseFunc, error) {
|
||||
f, err := l.lock(ctx, key, 1)
|
||||
|
||||
var (
|
||||
errTaken *redsync.ErrTaken
|
||||
errNodeTaken *redsync.ErrNodeTaken
|
||||
)
|
||||
if errors.As(err, &errTaken) || errors.As(err, &errNodeTaken) {
|
||||
if _, taken := errors.AsType[*redsync.ErrTaken](err); taken {
|
||||
return false, f, nil
|
||||
}
|
||||
if _, nodeTaken := errors.AsType[*redsync.ErrNodeTaken](err); nodeTaken {
|
||||
return false, f, nil
|
||||
}
|
||||
return err == nil, f, err
|
||||
@@ -112,7 +111,7 @@ func (l *redisLocker) startExtend() {
|
||||
|
||||
toExtend := make([]*redsync.Mutex, 0)
|
||||
l.mutexM.Range(func(_, value any) bool {
|
||||
m := value.(*redsync.Mutex)
|
||||
m := value.(*redsync.Mutex) //nolint:forcetypeassert // mutexM only ever holds *redsync.Mutex
|
||||
|
||||
// Extend the lock if it is not expired.
|
||||
// Although the mutex will be removed from the map before it is released,
|
||||
|
||||
Reference in New Issue
Block a user