From 0c9c28c418424c10cffc8a2d62eab220e290ef9a Mon Sep 17 00:00:00 2001
From: Riccardo Schirone <sirmy15@gmail.com>
Date: Wed, 13 Jul 2022 10:10:45 +0200
Subject: [PATCH] Add cmd flag to choose which type of dependencies to print

---
 cmd/deplist/deplist.go | 51 +++++++++++++++++++++++++++++++++++++-----
 1 file changed, 45 insertions(+), 6 deletions(-)

diff --git a/cmd/deplist/deplist.go b/cmd/deplist/deplist.go
index 664ea640..85678c9b 100644
--- a/cmd/deplist/deplist.go
+++ b/cmd/deplist/deplist.go
@@ -3,18 +3,56 @@ package main
 import (
 	"flag"
 	"fmt"
+	"strings"
 
 	"github.com/RedHatProductSecurity/deplist"
 	purl "github.com/mcoops/packageurl-go"
 	log "github.com/sirupsen/logrus"
 )
 
+type searchModeFlag []string
+
+func (i *searchModeFlag) String() string {
+	return strings.Join(*i, ", ")
+}
+
+func (i *searchModeFlag) Set(value string) error {
+	values := strings.Split(value, ",")
+	for _, value := range values {
+		switch value {
+		case "deps":
+			*i = append(*i, "deps")
+		case "bundled":
+			*i = append(*i, "bundled")
+		}
+	}
+	return nil
+}
+
+func (i *searchModeFlag) ShouldHandleDep(dep deplist.Dependency) bool {
+	res := false
+	for _, searchMode := range *i {
+		switch searchMode {
+		case "deps":
+			res = res || !dep.IsBundled
+		case "bundled":
+			res = res || dep.IsBundled
+		}
+	}
+	return res
+}
+
 func main() {
 	deptypePtr := flag.Int("deptype", -1, "golang, nodejs, python etc")
 	debugPtr := flag.Bool("debug", false, "debug logging (default false)")
+	var searchModes searchModeFlag
+	flag.Var(&searchModes, "modes", "search mode (bundled, deps)")
 
 	flag.Parse()
 
+	if len(searchModes) == 0 {
+		searchModes = []string{"deps", "bundled"}
+	}
 	if *debugPtr == true {
 		log.SetLevel(log.DebugLevel)
 	}
@@ -33,23 +71,24 @@ func main() {
 
 	if *deptypePtr == -1 {
 		for _, dep := range deps {
+			if !searchModes.ShouldHandleDep(dep) {
+				continue
+			}
 			version := dep.Version
 
 			inst, _ := purl.FromString(fmt.Sprintf("pkg:%s/%s@%s", deplist.GetLanguageStr(dep.DepType), dep.Path, version))
 			fmt.Print(inst)
-			if dep.IsBundled {
-				fmt.Print(" [bundled]")
-			}
 			fmt.Println()
 		}
 	} else {
 		deptype := deplist.Bitmask(*deptypePtr)
 		for _, dep := range deps {
+			if !searchModes.ShouldHandleDep(dep) {
+				continue
+			}
+
 			if (dep.DepType & deptype) == deptype {
 				fmt.Printf("%s@%s", dep.Path, dep.Version)
-				if dep.IsBundled {
-					fmt.Print(" [bundled]")
-				}
 				fmt.Println()
 			}
 		}