main.go (1447B)
1 // Look for consumers of a given OpenBSD port. 2 // reimplementation of Daniel Jakots' python script of the same purpose 3 package main 4 5 import ( 6 "database/sql" 7 "flag" 8 "fmt" 9 "log" 10 "os" 11 "strings" 12 13 _ "github.com/mattn/go-sqlite3" 14 ) 15 16 var Version string 17 18 func main() { 19 ver := flag.Bool("v", false, "Shows version and exists") 20 depType := flag.String("t", "run,test,lib,build", "Dependencies to look for") 21 flag.Parse() 22 23 if *ver { 24 fmt.Printf("%s\n", Version) 25 os.Exit(0) 26 } 27 28 if len(flag.Args()) < 1 { 29 flag.Usage() 30 os.Exit(1) 31 } 32 33 db, err := sql.Open("sqlite3", "/usr/local/share/sqlports") 34 if err != nil { 35 log.Fatal(err) 36 } 37 defer db.Close() 38 39 // TODO: better deal with this ... it goes directly to an SQL query. 40 // run to the hills ! run for your lives ! 41 var dependencies []string 42 deps := strings.Split(*depType, ",") 43 for _, x := range deps { 44 dependencies = append(dependencies, strings.ToUpper(x)+"_DEPENDS") 45 } 46 47 pkg := flag.Args()[0] 48 fmt.Printf("Consumers for %s:\n", pkg) 49 50 for _, d := range dependencies { 51 baseQuery := "SELECT FULLPKGPATH FROM Ports where " 52 rows, err := db.Query(baseQuery+d+" like ?", "%"+pkg+"%") 53 if err != nil { 54 log.Fatal(err) 55 } 56 defer rows.Close() 57 58 fmt.Printf("%s\n", d) 59 for rows.Next() { 60 var pkgpath string 61 if err := rows.Scan(&pkgpath); err != nil { 62 log.Fatal(err) 63 } 64 fmt.Printf(" > %s\n", pkgpath) 65 } 66 if err := rows.Err(); err != nil { 67 log.Fatal(err) 68 } 69 } 70 71 }