mirror of
https://github.com/grafana/grafana.git
synced 2024-11-26 10:50:37 -06:00
de8696d5d3
This commit fixes the following golint warnings: pkg/bus/bus.go:64:9: if block ends with a return statement, so drop this else and outdent its block pkg/bus/bus.go:84:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:137:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:177:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:183:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:199:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:208:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/components/dynmap/dynmap.go:236:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:242:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:257:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:263:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:278:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:284:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:299:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:331:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:350:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:356:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:366:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:390:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:396:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:405:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:427:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:433:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:442:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:459:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:465:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:474:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:491:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:497:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:506:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:523:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:529:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:538:12: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:555:9: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:561:10: if block ends with a return statement, so drop this else and outdent its block pkg/components/dynmap/dynmap.go:570:12: if block ends with a return statement, so drop this else and outdent its block pkg/login/ldap.go:55:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/login/ldap_test.go:372:10: if block ends with a return statement, so drop this else and outdent its block pkg/middleware/middleware_test.go:213:12: if block ends with a return statement, so drop this else and outdent its block pkg/plugins/dashboard_importer.go:153:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/plugins/dashboards_updater.go:39:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/plugins/dashboards_updater.go:121:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/plugins/plugins.go:210:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/plugins/plugins.go:235:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/eval_context.go:111:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/notifier.go:92:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/notifier.go:98:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/notifier.go:122:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/rule.go:108:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/rule.go:118:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/rule.go:121:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/alerting/notifiers/telegram.go:94:10: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/annotation.go:34:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/sqlstore/annotation.go:99:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/sqlstore/dashboard_test.go:107:13: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/plugin_setting.go:78:10: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/preferences.go:91:10: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/user.go:50:10: if block ends with a return statement, so drop this else and outdent its block pkg/services/sqlstore/migrator/migrator.go:106:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/services/sqlstore/migrator/postgres_dialect.go:48:10: if block ends with a return statement, so drop this else and outdent its block pkg/tsdb/time_range.go:59:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/tsdb/time_range.go:67:9: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) pkg/tsdb/cloudwatch/metric_find_query.go:225:9: if block ends with a return statement, so drop this else and outdent its block pkg/util/filepath.go:68:11: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
132 lines
3.7 KiB
Go
132 lines
3.7 KiB
Go
package util
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
//WalkSkipDir is the Error returned when we want to skip descending into a directory
|
|
var WalkSkipDir = errors.New("skip this directory")
|
|
|
|
//WalkFunc is a callback function called for each path as a directory is walked
|
|
//If resolvedPath != "", then we are following symbolic links.
|
|
type WalkFunc func(resolvedPath string, info os.FileInfo, err error) error
|
|
|
|
//Walk walks a path, optionally following symbolic links, and for each path,
|
|
//it calls the walkFn passed.
|
|
//
|
|
//It is similar to filepath.Walk, except that it supports symbolic links and
|
|
//can detect infinite loops while following sym links.
|
|
//It solves the issue where your WalkFunc needs a path relative to the symbolic link
|
|
//(resolving links within walkfunc loses the path to the symbolic link for each traversal).
|
|
func Walk(path string, followSymlinks bool, detectSymlinkInfiniteLoop bool, walkFn WalkFunc) error {
|
|
info, err := os.Lstat(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var symlinkPathsFollowed map[string]bool
|
|
var resolvedPath string
|
|
if followSymlinks {
|
|
resolvedPath = path
|
|
if detectSymlinkInfiniteLoop {
|
|
symlinkPathsFollowed = make(map[string]bool, 8)
|
|
}
|
|
}
|
|
return walk(path, info, resolvedPath, symlinkPathsFollowed, walkFn)
|
|
}
|
|
|
|
//walk walks the path. It is a helper/sibling function to Walk.
|
|
//It takes a resolvedPath into consideration. This way, paths being walked are
|
|
//always relative to the path argument, even if symbolic links were resolved).
|
|
//
|
|
//If resolvedPath is "", then we are not following symbolic links.
|
|
//If symlinkPathsFollowed is not nil, then we need to detect infinite loop.
|
|
func walk(path string, info os.FileInfo, resolvedPath string, symlinkPathsFollowed map[string]bool, walkFn WalkFunc) error {
|
|
if info == nil {
|
|
return errors.New("Walk: Nil FileInfo passed")
|
|
}
|
|
err := walkFn(resolvedPath, info, nil)
|
|
if err != nil {
|
|
if info.IsDir() && err == WalkSkipDir {
|
|
err = nil
|
|
}
|
|
return err
|
|
}
|
|
if resolvedPath != "" && info.Mode()&os.ModeSymlink == os.ModeSymlink {
|
|
path2, err := os.Readlink(resolvedPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
//vout("SymLink Path: %v, links to: %v", resolvedPath, path2)
|
|
if symlinkPathsFollowed != nil {
|
|
if _, ok := symlinkPathsFollowed[path2]; ok {
|
|
errMsg := "Potential SymLink Infinite Loop. Path: %v, Link To: %v"
|
|
return fmt.Errorf(errMsg, resolvedPath, path2)
|
|
}
|
|
symlinkPathsFollowed[path2] = true
|
|
}
|
|
info2, err := os.Lstat(path2)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return walk(path, info2, path2, symlinkPathsFollowed, walkFn)
|
|
}
|
|
if info.IsDir() {
|
|
list, err := ioutil.ReadDir(path)
|
|
if err != nil {
|
|
return walkFn(resolvedPath, info, err)
|
|
}
|
|
var subFiles = make([]subFile, 0)
|
|
for _, fileInfo := range list {
|
|
path2 := filepath.Join(path, fileInfo.Name())
|
|
var resolvedPath2 string
|
|
if resolvedPath != "" {
|
|
resolvedPath2 = filepath.Join(resolvedPath, fileInfo.Name())
|
|
}
|
|
subFiles = append(subFiles, subFile{path: path2, resolvedPath: resolvedPath2, fileInfo: fileInfo})
|
|
}
|
|
|
|
if containsDistFolder(subFiles) {
|
|
err := walk(
|
|
filepath.Join(path, "dist"),
|
|
info,
|
|
filepath.Join(resolvedPath, "dist"),
|
|
symlinkPathsFollowed,
|
|
walkFn)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
for _, p := range subFiles {
|
|
err = walk(p.path, p.fileInfo, p.resolvedPath, symlinkPathsFollowed, walkFn)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|
|
return nil
|
|
}
|
|
|
|
type subFile struct {
|
|
path, resolvedPath string
|
|
fileInfo os.FileInfo
|
|
}
|
|
|
|
func containsDistFolder(subFiles []subFile) bool {
|
|
for _, p := range subFiles {
|
|
if p.fileInfo.IsDir() && p.fileInfo.Name() == "dist" {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|