diff --git a/cmd/code/scan.go b/cmd/code/scan.go index 2f6bfe3..79929a8 100644 --- a/cmd/code/scan.go +++ b/cmd/code/scan.go @@ -2,6 +2,7 @@ package code import ( "context" + "regexp" "github.com/safedep/vet/internal/command" "github.com/safedep/vet/internal/ui" @@ -15,6 +16,7 @@ var ( dbPath string appDirs []string importDirs []string + excludePatterns []string skipDependencyUsagePlugin bool ) @@ -31,6 +33,8 @@ func newScanCommand() *cobra.Command { cmd.Flags().StringVar(&dbPath, "db", "", "Path to create the sqlite database") cmd.Flags().StringArrayVar(&appDirs, "app", []string{"."}, "Directories to scan for application code files") cmd.Flags().StringArrayVar(&importDirs, "import-dir", []string{}, "Directories to scan for import files") + cmd.Flags().StringArrayVarP(&excludePatterns, "exclude", "", []string{}, + "Name patterns to ignore while scanning a codebase") cmd.Flags().BoolVar(&skipDependencyUsagePlugin, "skip-dependency-usage-plugin", false, "Skip dependency usage plugin analysis") _ = cmd.MarkFlagRequired("db") @@ -59,9 +63,15 @@ func internalStartScan() error { return err } + excludePatternsRegexps := []*regexp.Regexp{} + for _, pattern := range excludePatterns { + excludePatternsRegexps = append(excludePatternsRegexps, regexp.MustCompile(pattern)) + } + codeScanner, err := code.NewScanner(code.ScannerConfig{ AppDirectories: appDirs, ImportDirectories: importDirs, + ExcludePatterns: excludePatternsRegexps, Languages: allowedLanguages, SkipDependencyUsagePlugin: skipDependencyUsagePlugin, Callbacks: &code.ScannerCallbackRegistry{ diff --git a/pkg/storage/ent_sqlite.go b/pkg/storage/ent_sqlite.go index 0d4bebe..13f2f3c 100644 --- a/pkg/storage/ent_sqlite.go +++ b/pkg/storage/ent_sqlite.go @@ -3,6 +3,8 @@ package storage import ( "context" "fmt" + "os" + "path/filepath" _ "github.com/mattn/go-sqlite3" "github.com/safedep/vet/ent" @@ -29,6 +31,12 @@ func NewEntSqliteStorage(config EntSqliteClientConfig) (Storage[*ent.Client], er mode = "ro" } + // Ensure the path exists + dir := filepath.Dir(config.Path) + if err := os.MkdirAll(dir, os.ModePerm); err != nil { + return nil, fmt.Errorf("failed to create DB path %s: %w", dir, err) + } + dbConn := fmt.Sprintf("file:%s?mode=%s&cache=private&_fk=1", config.Path, mode) client, err := ent.Open("sqlite3", dbConn) if err != nil {