utils

small programs, scripts and utils
git clone https://git.e1e0.net/utils.git
Log | Files | Refs

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 }