代码拉取完成,页面将自动刷新
package main
import (
"encoding/json"
"fmt"
"log"
"os"
"path/filepath"
"strings"
"sourcegraph.com/sourcegraph/srclib/unit"
)
func init() {
_, err := flagParser.AddCommand("scan",
"scan for Bash scripts",
"Scan the directory tree rooted at the current directory for Bash scripts.",
&scanCmd,
)
if err != nil {
log.Fatal(err)
}
}
type ScanCmd struct{}
var scanCmd ScanCmd
func (c *ScanCmd) Execute(args []string) error {
scanDir, err := filepath.EvalSymlinks(getCWD())
if err != nil {
return fmt.Errorf("resolving the path to scan failed with: %s", err)
}
units, err := scan(scanDir)
if err != nil {
return fmt.Errorf("scanning the path failed with: %s", err)
}
bytes, err := json.MarshalIndent(units, "", " ")
if err != nil {
return fmt.Errorf("marshalling source units failed with: %s, units: %s", err, units)
}
if _, err := os.Stdout.Write(bytes); err != nil {
return fmt.Errorf("writing output failed with: %s", err)
}
return nil
}
func scan(scanDir string) ([]*unit.SourceUnit, error) {
var units []*unit.SourceUnit
var files []string
err := filepath.Walk(scanDir, func(path string, info os.FileInfo, err error) error {
if err != nil {
return fmt.Errorf("walking directory %s failed with: %s", scanDir, err)
}
// TODO(mate): implement a more sophisticated filter
_, name := filepath.Split(path)
if info.Mode().IsRegular() && (strings.HasSuffix(name, ".sh") || strings.HasSuffix(name, ".bash")) {
relpath, err := filepath.Rel(scanDir, path)
if err != nil {
return fmt.Errorf("making path %s relative to %s failed with: %s", path, scanDir, err)
}
files = append(files, relpath)
}
return nil
})
if err != nil {
return nil, fmt.Errorf("scanning for Bash scripts failed with: %s", err)
}
units = append(units, &unit.SourceUnit{
Key: unit.Key{
Name: "bash",
Type: "BashDirectory",
},
Info: unit.Info{
Files: files,
},
})
return units, nil
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。