From 2c5f9c41dffd118f5678c1df326314cfb83162bd Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 21 Jun 2022 16:38:19 +1000 Subject: [PATCH] Update bargle use --- cmd/torrent/main.go | 42 +++++++++++++++++++++++------------------ cmd/torrent/metainfo.go | 4 ++-- cmd/torrent/scrape.go | 8 ++++---- cmd/torrent/serve.go | 13 ++++++++----- 4 files changed, 38 insertions(+), 29 deletions(-) diff --git a/cmd/torrent/main.go b/cmd/torrent/main.go index f21bc87e..4a0fc3e3 100644 --- a/cmd/torrent/main.go +++ b/cmd/torrent/main.go @@ -2,12 +2,14 @@ package main import ( + "fmt" stdLog "log" "net/http" "github.com/anacrolix/bargle" "github.com/anacrolix/envpprof" xprometheus "github.com/anacrolix/missinggo/v2/prometheus" + "github.com/anacrolix/torrent/version" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" ) @@ -22,7 +24,9 @@ func main() { main := bargle.Main{} main.Defer(envpprof.Stop) debug := false - main.Options = append(main.Options, bargle.Flag{Longs: []string{"debug"}, Value: &debug}) + debugFlag := bargle.NewFlag(&debug) + debugFlag.AddLong("debug") + main.Options = append(main.Options, debugFlag.Make()) main.Positionals = append(main.Positionals, bargle.Subcommand{Name: "metainfo", Command: metainfoCmd()}, //bargle.Subcommand{Name: "announce", Command: func() bargle.Command { @@ -35,16 +39,15 @@ func main() { // } // return announceErr(cmd) //}()}, - //bargle.Subcommand{Name: "scrape", Command: func() bargle.Command { - // var cmd ScrapeCmd - // err := p.NewParser().AddParams( - // args.Pos("tracker", &cmd.Tracker), - // args.Pos("infohash", &cmd.InfoHashes, args.Arity('+'))).Parse() - // if err != nil { - // return err - // } - // return scrape(cmd) - //}()}, + bargle.Subcommand{Name: "scrape", Command: func() bargle.Command { + var scrapeCfg scrapeCfg + cmd := bargle.FromStruct(&scrapeCfg) + cmd.Desc = "fetch swarm metrics for info-hashes from tracker" + cmd.DefaultAction = func() error { + return scrape(scrapeCfg) + } + return cmd + }()}, bargle.Subcommand{Name: "download", Command: func() bargle.Command { var dlc DownloadCmd cmd := bargle.FromStruct(&dlc) @@ -100,13 +103,16 @@ func main() { // }(), // Desc: "reads bencoding from stdin into Go native types and spews the result", //}, - //bargle.Subcommand{Name: "version", Command: func() bargle.Command { - // fmt.Printf("HTTP User-Agent: %q\n", version.DefaultHttpUserAgent) - // fmt.Printf("Torrent client version: %q\n", version.DefaultExtendedHandshakeClientVersion) - // fmt.Printf("Torrent version prefix: %q\n", version.DefaultBep20Prefix) - // return nil - //}()}, - bargle.Subcommand{Name: "serve", Command: serve(), Desc: "creates and seeds a torrent from a filepath"}, + bargle.Subcommand{Name: "version", Command: bargle.Command{ + DefaultAction: func() error { + fmt.Printf("HTTP User-Agent: %q\n", version.DefaultHttpUserAgent) + fmt.Printf("Torrent client version: %q\n", version.DefaultExtendedHandshakeClientVersion) + fmt.Printf("Torrent version prefix: %q\n", version.DefaultBep20Prefix) + return nil + }, + Desc: "prints various protocol default version strings", + }}, + bargle.Subcommand{Name: "serve", Command: serve()}, ) main.Run() } diff --git a/cmd/torrent/metainfo.go b/cmd/torrent/metainfo.go index 4cca7954..38c14c87 100644 --- a/cmd/torrent/metainfo.go +++ b/cmd/torrent/metainfo.go @@ -22,9 +22,9 @@ func metainfoCmd() (cmd bargle.Command) { var mi *metainfo.MetaInfo // TODO: Test if bargle treats no subcommand as a failure. cmd.Positionals = append(cmd.Positionals, - &bargle.Positional[*string]{ + &bargle.Positional{ Name: "torrent file", - Value: &metainfoPath, + Value: &bargle.String{Target: &metainfoPath}, AfterParseFunc: func(ctx bargle.Context) error { ctx.AfterParse(func() (err error) { mi, err = metainfo.LoadFromFile(metainfoPath) diff --git a/cmd/torrent/scrape.go b/cmd/torrent/scrape.go index a0a93b57..56b9c70c 100644 --- a/cmd/torrent/scrape.go +++ b/cmd/torrent/scrape.go @@ -11,12 +11,12 @@ import ( "github.com/anacrolix/torrent" ) -type ScrapeCmd struct { - Tracker string `arg:"positional"` - InfoHashes []torrent.InfoHash +type scrapeCfg struct { + Tracker string `arg:"positional"` + InfoHashes []torrent.InfoHash `arity:"+" arg:"positional"` } -func scrape(flags ScrapeCmd) error { +func scrape(flags scrapeCfg) error { trackerUrl, err := url.Parse(flags.Tracker) if err != nil { return fmt.Errorf("parsing tracker url: %w", err) diff --git a/cmd/torrent/serve.go b/cmd/torrent/serve.go index 5b88a529..cf6d483f 100644 --- a/cmd/torrent/serve.go +++ b/cmd/torrent/serve.go @@ -14,8 +14,11 @@ import ( ) func serve() (cmd bargle.Command) { - filePath := &bargle.Positional[string]{} - cmd.Positionals = append(cmd.Positionals, filePath) + var filePath string + cmd.Positionals = append(cmd.Positionals, &bargle.Positional{ + Value: &bargle.String{Target: &filePath}, + }) + cmd.Desc = "creates and seeds a torrent from a filepath" cmd.DefaultAction = func() error { cfg := torrent.NewDefaultClientConfig() cfg.Seed = true @@ -35,9 +38,9 @@ func serve() (cmd bargle.Command) { info := metainfo.Info{ PieceLength: pieceLength, } - err = info.BuildFromFilePath(filePath.Value) + err = info.BuildFromFilePath(filePath) if err != nil { - return fmt.Errorf("building info from path %q: %w", filePath.Value, err) + return fmt.Errorf("building info from path %q: %w", filePath, err) } for _, fi := range info.Files { log.Printf("added %q", fi.Path) @@ -54,7 +57,7 @@ func serve() (cmd bargle.Command) { to, _ := cl.AddTorrentOpt(torrent.AddTorrentOpts{ InfoHash: ih, Storage: storage.NewFileOpts(storage.NewFileClientOpts{ - ClientBaseDir: filePath.Value, + ClientBaseDir: filePath, FilePathMaker: func(opts storage.FilePathMakerOpts) string { return filepath.Join(opts.File.Path...) }, -- 2.44.0